已尝试附加或添加非新的实体,可能已从另一个DataContext加载。这不受支持

时间:2011-11-08 13:53:30

标签: c# linq-to-sql insert submitchanges

我的项目分为PresentationLayer,BusinesLogicLayer和DataAccessLayer。每个创建的对象都经过这些层。 简化:

SetFilter.xaml.cs

FilterFactory fFactory = new FilterFactory();
Filter myFilter = fFactory.Create(someClient, time, message);
FilterBLO filterBLO = new FilterBLO();
filterBLO.Save(myFilter);

FilterBLO.cs

FilterDAO filterDAO = new FilterDAO();
using (TransactionScope transcope = new TransactionScope())
{
    filterDAO.Save(myFilter);
    transcope.Complete()
}

FilterDAO.cs

using(DBDataContext dbdc = new DBDataContext)
{
    dbdc.Filter.InsertOnSubmit(myFilter);
    changeSet = dbdc.GetChangeSet();
    dbdc.SubmitChanges()
}

过滤器使用包含ClientClientFilter的{​​{1}}表格与表格FilterID相关联。 (多对多的关系)

如果我创建新的3个对象,一切正常,但如果我在数据库中获得现有ClientID(也使用ClientClientBLO,那么在单独的ClientDAO中分开TransactionScope)我收到错误:

  

尝试附加或添加非新的实体,   也许是从另一个DataContext加载的。这不是   支撑。

(我搜索过其他类似的帖子,但我找不到解决问题的方法。)

最后我的问题

如果数据库中存在DBDataContext,我应该如何保存myFilter。我在Client中尝试Attach()到datacontext,但我得到了同样的错误。

1 个答案:

答案 0 :(得分:3)

您必须使用与InsertOnSubmit Filter相同的DataContext从数据库中获取Client;那么你必须在InsertOnSubmit之前使用该对象在Filter对象中设置Client值。

相关问题