在我以前的應用程序中,當我使用linq-to-sql時,我總是使用一個類來放入我的linq-to-sql代碼,所以我只有一個DataContext
。從另一個DataContext加載?
我目前的應用雖然越來越太大了,我開始在不同的班級了分裂我的代碼(一個客戶,一個地點,一個供應商......),他們都有自己的DataContext DatabaseDesignDataContext dc = new DatabaseDesignDataContext();
現在,當我嘗試保存位置的接觸(這是我從一個不同的DataContext了)我得到以下錯誤:
"An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported."
我想這是因爲我創造了每個類別的DataContext
,但我不會」你知道如何做到這一點嗎?
我在找任何想法,謝謝。
我班如下所示:
public class LocatieManagement
{
private static DatabaseDesignDataContext dc = new DatabaseDesignDataContext();
public static void addLocatie(locatie nieuweLocatie)
{
dc.locaties.InsertOnSubmit(nieuweLocatie);
dc.SubmitChanges();
}
public static IEnumerable<locatie> getLocaties()
{
var query = (from l in dc.locaties
select l);
IEnumerable<locatie> locaties = query;
return locaties;
}
public static locatie getLocatie(int locatie_id)
{
var query = (from l in dc.locaties
where l.locatie_id == locatie_id
select l).Single();
locatie locatie = query;
return locatie;
}
}
如果你想做任何交易處理(你應該這樣做),這是一個壞主意。此外,如果使用多個線程或者它是一個Web應用程序,當多個線程嘗試使用相同的數據上下文時,您將遇到問題。這也防止了多個同時使用的數據庫連接被使用,因此一切都依賴於相同的連接。 – 2012-06-22 12:55:27
謝謝,我不知道交易處理是什麼。你會如何解決這個問題? – Schoof 2012-06-22 14:41:49
我的意思是你應該創建一個新的DataContext並在執行某些工作時使用它。然後擺脫它(在'using(MyDataContext dc = new MyDataContext())'塊中做你的工作)。不要使用全局數據上下文 - 爲每個需要做的事情創建一個全新的數據上下文。例如,如果您正在加載網頁數據,請爲該頁面視圖使用單個數據上下文。如果您正在執行所有步驟相互關聯和相互依賴的多步操作,那麼也應爲整個流程使用單一數據上下文。希望這可以幫助! – 2012-06-22 19:11:31