Почему при связывании сущностей LINQ to SQL создается новая (дублирующаяся) строка при вставке новой записи? - PullRequest
6 голосов
/ 24 апреля 2009

Я пытаюсь вставить новую сущность, используя LINQ-to-SQL, и сущность связана с сущностью пользователя. Вставка новой сущности прошла успешно, но моя существующая сущность пользователя вставляется так, как если бы она была новым пользователем. Код выглядит примерно так:

var someEntity = new Entity();
someEntity.User = this.User;
dataContextInstance.SomeEntities.InsertOnSubmit(someEntity);
dataContextInstance.SubmitChanges();

Кто-нибудь знает, почему пользователь вставляется как совершенно новая сущность в таблицу Users? Казалось бы, User.UserId станет значением внешнего ключа в столбце UserId строки, сопоставленной с вставляемым someEntity.

Спасибо за любую помощь / предложения / комментарии

Ответы [ 3 ]

10 голосов
/ 28 апреля 2009

Поскольку сущность User ранее была загружена другим DataContext (который, к счастью, должен быть уже удален!), Вы должны присоединить его к новому (текущему) DataContext, в противном случае DataContext будет просматривать его как новую сущность, а не как существующий (который уже существует в БД).

0 голосов
/ 28 апреля 2009

Убедитесь, что вы используете один и тот же экземпляр DataContext для обеих таблиц. Смотрите мой вопрос здесь для (я думаю) более ясного объяснения проблемы.

0 голосов
/ 24 апреля 2009

Извините, я не понимаю? Хотите обновить существующего пользователя? Для чего нужен SomeEntity?

Имеет смысл, что LINQ пытается вставить нового пользователя, потому что вы говорите это сделать. Если вы просто хотите изменить одного из своих пользователей, вам нужно выбрать его из SomeEntities, выполнить обновление и затем вызвать SubmitChanges (LINQ распознает, что исходная сущность была изменена) - без .InsertOnSubmit.

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