2010-02-17 55 views
3

在我的LINQ to SQL生成的類中,我有一些包含EntitySets的類。如何更新/修改LINQ EntitySet?

一切都很好,直到我需要修改EntitySet(添加,刪除一些關係)。 我認爲這是去上班做這樣的事情:

User.Actions = newUserActions; //This is how I used it with NHibernate 

然後,當我試圖提交的變化,我可以得到一個重複鍵異常,這意味着它分配新的之前沒有清除舊的行動其中一些可能會重複;我必須手動執行嗎?

什麼是最好的辦法做到這一點(更新EntitySet)?建議?

Thnx

回答

2

看來我必須手動完成。我的意思是先刪除關係(EntitySet的):

//The EntitySet is user.UserActions 
DataBaseContext.UserActions.DeleteAllOnSubmit(user.UserActions); 
DataBaseContext.SubmitChanges(); 

而在此之後,指定「新」的EntitySet:

user.UserActions.Assign(GetSelectedActions()); 
DataBaseContext.SubmitChanges(); 

我做了工作,這樣做,但是...... 我必須將2個SubmitChanges()應用於數據庫? 這不是一個更好的方法嗎?

+0

如果沒有更好的方法來做到這一點,我會感到驚訝,因此我們只提交一個提交中的對象樹的變異部分,而無需手動修改它。也許[Automapper](http://automapper.org/)可以在這裏使用,但我沒有嘗試過。 – orad 2016-10-15 23:51:21

1

難道這不容易嗎?

user.UserActions.Clear(); 
user.UserActions.AddRange(GetSelectedActions()); 
context.SubmitChanges(); 
+0

沒有人沒有工作,它繼續拋出這個前:「不能添加一個實體的密鑰已被使用。」 – 2010-02-24 01:30:54

0

在SQL數據庫關係中是否有級聯刪除集?你需要這個集合和重新生成的類來解決這個問題。