我的项目分为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()
}
过滤器使用包含Client
和ClientFilter
的{{1}}表格与表格FilterID
相关联。 (多对多的关系)
如果我创建新的3个对象,一切正常,但如果我在数据库中获得现有ClientID
(也使用Client
和ClientBLO
,那么在单独的ClientDAO
中分开TransactionScope
)我收到错误:
尝试附加或添加非新的实体, 也许是从另一个DataContext加载的。这不是 支撑。
(我搜索过其他类似的帖子,但我找不到解决问题的方法。)
最后我的问题
如果数据库中存在DBDataContext
,我应该如何保存myFilter
。我在Client
中尝试Attach()
到datacontext,但我得到了同样的错误。
答案 0 :(得分:3)
您必须使用与InsertOnSubmit Filter相同的DataContext从数据库中获取Client;那么你必须在InsertOnSubmit之前使用该对象在Filter对象中设置Client值。