Обновление Linq to Sql создает дублирующую запись - PullRequest
0 голосов
/ 08 июня 2009

Я использую linq to sql в своем слое данных, где я добавил таблицу "settings" в обычную таблицу asp_user. В этой таблице настроек я храню несколько записей, одна из которых является предпочтительной единицей (внешний ключ к таблице единиц).

Теперь, когда этот предпочтительный юнит должен измениться (скажем, с литра на килограмм), я вызываю мой UnitService, чтобы получить правильный экземпляр юнита и установить мои настройки. Это создает новый (дублирующий) элемент в базе данных (теперь в моей таблице Units есть две килограммовые записи). Это, конечно, не то, что я хотел.

У меня такое чувство, что я делаю кучу фундаментальных вещей неправильно

UserSetting setting = AccountService.GetUserSetting(user.Identity.Name);
if (setting.PreferedUnitId != unitId)
     setting.Unit = UnitService.GetUnitById(unitId);
AccountService.SaveuserSetting(setting);

Ответы [ 2 ]

1 голос
/ 08 июня 2009

Вам, вероятно, нужно создать DataContext.Units. Присоединить (unit), чтобы Linq to SQL знал, что ваш объект unit уже существует и его не нужно вставлять. Обратите внимание, что я предполагаю, что ваша таблица Units представлена ​​как свойство Units в DataContext.

Я размышляю здесь, но похоже, что ваш AccountService использует другой DataContext для вашего UnitService, так что вы фактически находитесь в сценарии отсоединенных объектов. Это сообщение в блоге может прояснить ситуацию

1 голос
/ 08 июня 2009

Что делает AccountService.SaveuserSetting? Это, вероятно, делает ненужные InsertOnSubmit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...