Сохранить отдельный объект в Entity Framework 6

c# entity-framework entity-framework-6

Вопрос

Я прочитал много сообщений о сохранении отдельного объекта в Entity Framework. Все они, похоже, применяются к более старым версиям Entity Framework. Они ссылаются на такие методы, как ApplyCurrentValues ​​и ChangeObjectState, которые, похоже, не существуют. По прихоти я решил попробовать метод, который я нашел через intellisense, и я хочу убедиться, что это правильный способ сделать это, так как я не вижу, что происходит за кулисами:

public void SaveOrder(Order order)
{
    using (VirtualWebEntities db = new VirtualWebEntities())
    {
        db.Orders.Attach(order);
        db.Entry(order).State = System.Data.Entity.EntityState.Modified;
        db.SaveChanges();
    }
}

Это правильный способ обновить существующий элемент, который был изменен?

Принятый ответ

Да, это правильно. В этой статье описываются различные способы добавления и присоединения объектов , и в этом примере приведен пример:

var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" };
using (var context = new BloggingContext())
{
    // The next step implicitly attaches the entity
    context.Entry(existingBlog).State = EntityState.Modified;
    // Do some more work...
    context.SaveChanges();
}

Поскольку EF не знает, какие свойства отличаются от свойств в базе данных, он обновит их все:

Когда вы меняете состояние на Модифицированное, все свойства объекта будут помечены как измененные, и все значения свойств будут отправлены в базу данных при вызове SaveChanges.

Чтобы этого избежать, вы можете установить, какие свойства изменяются вручную, а не устанавливать полное состояние объекта:

using (var context = new BloggingContext())
{
    var blog = context.Blogs.Find(1);
    context.Entry(blog).Property(u => u.Name).IsModified = true;     
    // Use a string for the property name
    context.Entry(blog).Property("Name").IsModified = true;
}



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему