Sax*_*man 12 entity-framework poco entity-framework-4
我正在使用EF CTP 4,使用POCO模型,添加一个新对象并调用SaveChanges(),但更新对象不起作用.这是更新的代码:
public void UpdateContact(Contact contact)
{
var findContact = GetContact(contact.ContactID);
findContact = contact;
_context.SaveChanges();
}
public Contact GetContact(int contactId)
{
return GetAllContacts().SingleOrDefault(c => c.ContactID == contactId);
}
public IQueryable<Contact> GetAllContacts()
{
return _context.Contacts;
}
Run Code Online (Sandbox Code Playgroud)
我不确定我在这里做错了什么.任何的想法?谢谢.
Yak*_*ych 20
问题是,当你将findContact = contact在EntityState没有得到在改变ObjectStateManager(所以它仍然设置为Unchanged).因此,不会Update为实体生成SQL语句.您有几个选项可以进行更新:
选项1:findContact逐个填充:
var findContact = GetContact(contact.ContactID);
findContact.FirstName = contact.FirstName;
findContact.LastName = contact.LastName;
...
_context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
选项2:使用ApplyCurrentValues方法:
var findContact = GetContact(contact.ContactID);
_context.ApplyCurrentValues("Contacts", contact);
_context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
选项3:附加更新的实体并更改状态ObjectStateManager.(注意:这不会向数据库进行往返以获取现有联系人).
_context.AttachTo("Contacts", contact);
var contactEntry = Context.ObjectStateManager.GetObjectStateEntry(contact);
contactEntry.ChangeState(EntityState.Modified);
_context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11259 次 |
| 最近记录: |