实体框架 - 多对多 - 不节约

时间:2014-06-27 02:12:59

标签: entity-framework many-to-many

我有两个对象(对象A和对象B)。他们有很多关系。

我正在使用通用数据访问层来执行此操作:

public virtual void Save(params T[] items)
{
  var keyName = GetIdKeyName<T>();

  foreach (T item in items.Where(GetByIdPredicate<T>(0, keyName).Compile()))
  {
    db.Entry(item).State = EntityState.Added;
  }

  foreach (T item in items.Where(GetByIdPredicate<T>(0, keyName, ExpressionType.NotEqual).Compile()))
  {
    db.Entry(item).State = EntityState.Modified;
  }

  db.SaveChanges();
}

我想保存对象A和对象B之间的关系。如果我这样做:

 ObjectA.ObjectBs.Add(ObjectB)
 dataAccess.Save(ObjectA)

生成了多对多关系,但它创建了一个新的ObjectB。我认为这是因为它没有更新的实体状态,所以我尝试了:

dataAccess.Save(ObjectB)
ObjectA.ObjectBs.Add(ObjectB)
dataAccess.Save(ObjectA)

但同样的事情发生了。关于我如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

我发现了我的问题。我正在为每个对象创建一个数据访问实例。因此,当DataAccess保存时,它不知道DataAccess。我更改了访问层,因此方法采用了一种类型,一切都很好。