Мой проект разделен на 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
, содержащей FilterID
и ClientID
. (отношение многие ко многим)
Если я создаю новые 3 объекта, все в порядке, но если я получаю существующую Client
в базе данных (также используя ClientBLO
и ClientDAO
, поэтому в отдельном TransactionScope
и отдельном DBDataContext
) я получаю ошибку:
Была предпринята попытка присоединить или добавить объект, который не является новым,
возможно, был загружен из другого DataContext. Это не
поддерживается.
(Я искал другие похожие темы, но не нашел решения своей проблемы.)
И наконец мой вопрос
Как сохранить myFilter
, если в базе данных существует Client
. Я попытался Attach()
передать этот текст в FilterDAO.cs
, но я получил ту же ошибку.