2017-01-04 2 views
0

У меня есть объект с несколькими действительно большими строковыми свойствами. Кроме того, он имеет простую временную метку.Entity Framework 6: возможно ли обновить свойство конкретного объекта без получения всего объекта?

То, что я пытаюсь достичь, - это обновление только свойства timestamp без получения всего огромного объекта на сервере.

В конце концов, я хотел бы использовать EF и сделать наиболее производительным способом что-то эквивалентно этому:

update [...] 
set [...] = [...] 
where [...] 

ответ

2

Используя следующее, вы можете обновить один столбец:

var yourEntity = new YourEntity() { Id = id, DateProp = dateTime }; 
    using (var db = new MyEfContextName()) 
    { 
    db.YourEntities.Attach(yourEntity); 
    db.Entry(yourEntity).Property(x => x.DateProp).IsModified = true; 
    db.SaveChanges(); 
    } 
+0

Я попробовал предложенный свое решение, он не работает для меня. Поля строки в моем вопросе выше являются обязательными. Поэтому, когда я создаю пустой объект только с идентификатором и меткой времени, он терпит неудачу во время «SaveChanges» и жалуется на отсутствие необходимых полей. Есть идеи? – Illidan

-1

Хорошо, мне удалось справиться с этим. Решение такое же, как предложено Seany84, с единственным дополнением к отказоустойчивой проверке, чтобы преодолеть проблему с обязательными полями. В принципе, я должен был добавить следующую строку непосредственно перед «SaveChanges():

db.Configuration.ValidateOnSaveEnabled = false; 

Таким образом, полное решение:

var yourEntity = new YourEntity() { Id = id, DateProp = dateTime }; 
    using (var db = new MyEfContextName()) 
    { 
    db.YourEntities.Attach(yourEntity); 
    db.Entry(yourEntity).Property(x => x.DateProp).IsModified = true; 
    db.Configuration.ValidateOnSaveEnabled = false; 
    db.SaveChanges(); 
    }