Получение первичного ключа после вставки LINQ2SQL - PullRequest
3 голосов
/ 08 июля 2011

Как я могу получить первичный ключ вновь созданной записи с помощью LINQ2SQL?

var peon = new Peon { name = 'Serf' };
context.Peons.InsertOnSubmit(peon);
context.SubmitChanges();

Будет ли модель LINQ2SQL автоматически обновляться с помощью первичного ключа?Я не смог найти никакой информации по этому вопросу в документации.

Или есть какой-то другой способ получить первичный ключ последней вставленной записи?Желательно без поиска записи.

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

// After previous code.
var bossPeonMapping = new { PeonId = peon.Id, BossId = boss.Id };
// Insert mapping

Буду признателен за любые советы, если LINQ2SQL предоставит мне лучший способ сделать это.

Ответы [ 4 ]

5 голосов
/ 08 июля 2011

После отправки изменений у сущности должно быть значение первичного ключа.

2 голосов
/ 08 июля 2011

В конструкторе Linq2SQL посмотрите свойства поля, являющегося первичным ключом.Убедитесь, что его AutoGeneratedValue = True и Auto-Sync = OnInsert.Если это так, оно должно заполняться значением, назначенным сервером базы данных во время вставки.

0 голосов
/ 31 августа 2011
try
{
    var peon = new Peon { name = 'Serf' };
    context.Peons.InsertOnSubmit(peon);
    context.SubmitChanges();
    return peon.Id;
}
catch(Exception e) { }
0 голосов
/ 09 июля 2011

Да, ключ будет доступен после первой отправки, но он вам не нужен. Вы можете использовать сущность в вашем новом отображении. Итак, новый {Peon = peon, ...} вместо peon.id

И вы можете отправить их обоих одновременно, что также предоставит вам бесплатное управление транзакциями.

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