Я ищу правильный способ обновления записи с использованием Entity Framework 6 MYSQL.
Ниже я сейчас использую.
public void Update(User user)
{
using (var ctx = new DataSystemDbContext())
{
ctx.Users.Attach(user);
ctx.Entry(user).State = EntityState.Modified;
ctx.SaveChanges();
}
}
И на моем модульном тесте.
[TestMethod]
public async Task User_Update()
{
var userService = new UserService();
var user = userService.GetById(1);
user.FullName = "Test Fullname";
userService.Update(user);
var updatedUser = userService.GetById(1);
Assert.AreEqual(user.FullName, updatedUser.FullName);
}
Когда он выполняется, все мои записи пользователя обновляются.
Это также связано с моей другой почтой. Но на моем другом посту он использует живой контекст, в отличие от этого.
MySQL Entity Framework 6 Обновление, влияющее на все строки Code First
Я исправил эту проблему, комментируя или не используя сгенерированную процедуру для CRUD.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Mapp all entities in a single line.
//modelBuilder.Types().Configure(t => t.MapToStoredProcedures());
}
Сгенерированный SQL
UPDATE 'Users' SET 'Email'=@gp1 WHERE 'Id' = 6
-- @gp1: '[email protected]' (Type = String, IsNullable = false, Size = 17)
-- Executing asynchronously at 25/06/2018 8:30:21 AM +08:00
-- Completed in 2 ms with result: 1
Я не уверен, есть ли у MySQL-провайдера ошибка или нет.