我正在使用 Entity Framework 4.4,并且我有一个像这样的一对多关系模型:
class A {
public int Id { get; set; }
public virtual B { get; set; }
public int BId;
}
class B {
public Id { get; set; }
private ICollection<A> _As;
public virtual ICollection<A> As
{
get { return _As ?? (_As = new HashSet<A>()); }
protected set { _As = value; }
}
}
现在,假设我有 2 个 A 实例,都具有相同的 B 实例。然后我会有这样的东西(JSON表示):
A: { Id: 1, BId: 1, B: { Id: 1, As: [ 1, 2 ] } }
A: { Id: 2, BId: 1, B: { Id: 1, As: [ 1, 2 ] } }
然后我想循环浏览我当前的 A 实例列表并将其添加到数据库上下文中:
foreach (var a in LocalAList)
{
dbContext.Add(a);
dbContext.SaveChanges();
}
问题是我收到异常通知我插入了重复的对象。我环顾四周,发现处理实体修改和附件的事情,但我对 EF 还是很陌生。我想这是一个典型的事情,并且有一个习惯用法来处理对象已经存在的对象插入。
如何在避免添加重复项的同时有效地将新对象添加到上下文中?我应该只捕获重复的异常并忽略它吗?有没有更好的检查方法?