尝试附加或添加一个不是新的实体,可能是从另一个DataContext加载的.这是不支持的
本文关键字:实体 另一个 不支持 加载 DataContext 添加 一个 | 更新日期: 2023-09-27 18:13:43
我的项目分为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()
}
Filter通过包含FilterID
和ClientID
的ClientFilter
表与表Client
连接。(多对多关系)
如果我创建新的3个对象一切正常,但如果我得到现有的Client
在数据库(也使用ClientBLO
和ClientDAO
,所以在单独的TransactionScope
和单独的DBDataContext
),我得到错误:
试图附加或添加一个不是新的实体,可能是从另一个DataContext加载的。这不是支持。
(我搜索了其他类似的线程,但我没有找到解决我的问题的方法)
最后是我的问题
如果Client
存在于数据库中,我应该如何保存myFilter
。我尝试Attach()
它的数据上下文在FilterDAO.cs
,但我得到同样的错误。
你必须从数据库中获得客户端与你使用InsertOnSubmit过滤器相同的DataContext;那么你必须在InsertOnSubmit之前使用该对象在Filter对象中设置Client值。