2010-02-17 3 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

1

Не было бы проще?

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

Ни один человек, который не работал, продолжает метать это сообщение: «Невозможно добавить сущность с ключом, который уже используется». –

0

Взаимосвязь базы данных SQL у вас есть набор каскадных удалений? Для этого вам нужен этот набор и классы, восстанавливающие его.