我想首先围绕EF6代码创建一个Repository Pattern。我相信我需要使用Detached实体,因为保存特定实体不应影响任何其他实体。有什么影响:
public void Create(T item)
{
_ctx.Entity.Add(item);
_ctx.SaveChanges();
_ctx.Entry(item).State = EntityState.Detached;
}
public void Update(T item)
{
_ctx.Entity.Attach(item);
_ctx.Entry(item).State = EntityState.Modified;
_ctx.SaveChanges();
_ctx.Entry(item).State = EntityState.Detached;
}
public void Delete(T item)
{
_ctx.Entity.Attach(item);
_ctx.Entity.Remove(item);
_ctx.SaveChanges();
}
我的测试POCOS是
public class Foo {
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Bar> Bars { get; set; }
}
public class Bar {
public int Id { get; set; }
[Required]
public Foo Foo { get; set; }
public string Name { get; set; }
}
这是否有公认的做法?在上面的代码中,例如,如果T item有一个子集合,并且我向该集合添加了一个元素并进行更新,那么该元素将不会被添加,我似乎遇到了
“保存不显示外部实体的实体时发生错误 他们关系的关键属性“
删除时出错。
谢谢!