将集合设置为已修改的实体框架

时间:2015-06-05 14:34:29

标签: c# entity-framework-6

如何以与我一样的方式设置要修改的集合

_context.Entry(thing).Property(x => x.MyProperty).isModified = true;

像:

_context.Entry(thing).Collection(x => x.MyCollection).isModified = true;

编辑:这样做的目的是我的集合是存储在查找表中的对象列表。我将只在这个集合中有一个带有id的存根列表,我想更新关系而不会弄乱审计值以及查找对象中包含的任何其他内容。 例如,联系人将具有多种联系类型,无论出于何种原因,这种联系类型都是此方案中的复杂对象。我希望能够仅使用FK添加和删除类型,并让EF处理关系修正。

public class Contact
{
   public int Id {get;set;}
   public list<ContactTypes> ContactTypes {get;set;}
   //audit values/other properties
}

public class ContactType
{
   public int Id {get;set;}
   public string Value {get;set;}
}

2 个答案:

答案 0 :(得分:3)

context.Entry代表单个实体,而不是集合。因此,您必须遍历集合并将每个实体标记为已修改。

答案 1 :(得分:1)

如果你有一个ForeignKey对象列表,你可能知道强迫EF关系修复它们是多么令人沮丧。这是一个光滑的方式。

public void SetContactTypesToUnchanged(Contact contact)
  {
    contact.ContactTypes.Each(type => _context.Entry(type).State = EntityState.Unchanged);
    _context.SaveChanges();
  }