我之前提过这个问题,但我认为我的说法不正确,所以这是第二次尝试。我有以下代码:
public User EditUser(User userToEdit)
{
//userToEdit contains values for eagerly loaded contacts entity
User originalUser = (from u in _entities.UserSet.Include("contacts")
where u.ID == userToEdit.ID
select u).FirstOrDefault();
_entities.ApplyPropertyChanges(originalUser.EntityKey.EntitySetName, userToEdit);
_entities.SaveChanges();
return userToEdit;
}
非常直接。但是,联系人实体未更新。据我所知,急切加载会将实体添加到数据上下文中,因此当使用分离的userToEdit调用ApplyPropertyChanges时,userToEdit中对联系人的更改将应用于附加的联系人实体。我错过了什么?
答案 0 :(得分:1)
是的,这是一个名为“Independent Associations”
的不幸副作用在EF(至少在3.5 SP1中)中,关系不被视为实体的一部分,即存在独立性。
这意味着调用ApplyPropertyChanges(...)
只影响结构中属于实体的属性,而不影响引用。
因此您需要将代码更改为:
public User EditUser(User userToEdit){
//userToEdit contains values for eagerly loaded contacts entity
User originalUser = (from u in _entities.UserSet.Include("contacts")
where u.ID == userToEdit.ID
select u).FirstOrDefault();
_entities.ApplyPropertyChanges(originalUser.EntityKey.EntitySetName, userToEdit);
originalUser.Contacts = userToEdit.Contacts;
_entities.SaveChanges();
return userToEdit;
}
这假定userToEdit.Contacts是引用(不是集合),并且不为null。
希望这有助于 亚历
PS在.NET 4.0 Beta2中,名为FK associations的内容将解决此问题,并使其成为可行的代码。