Как я могу получить значение первичного ключа, когда я вставляю новую запись? - PullRequest
7 голосов
/ 25 апреля 2009

Я использую класс LINQ-to-SQL. У него есть метод object.InsertOnSubmit (). Но он возвращает void, поэтому я могу получить значения первичного ключа после добавления записи.

Я хочу получить значение первичного ключа недавно вставленной записи.

Ответы [ 6 ]

8 голосов
/ 25 апреля 2009

да (при условии, что это поле идентичности).

Вызов только InsertOnSubmit не отправляет вставку в базу данных. Вам необходимо вызвать SubmitChanges, чтобы любые изменения в текущем экземпляре datacontext были отправлены в базу данных.

После того как вы вызвали SubmitChanges, вы можете получить доступ к значениям из экземпляра, который вы использовали при вызове InsertOnSubmit. Linq to sql заполняет эти значения для вас при выполнении вставки (что происходит во время SubmitChanges)

Проверьте этот пример: http://msdn.microsoft.com/en-us/vbasic/bb737920.aspx#dynid

7 голосов
/ 25 апреля 2009

Короче, тебе не нужно. Сам объект обновляется.

    public void Add(Person person)
    {
        using (MyEntities context = new MyEntities())
        {
            Context.Persons.InsertOnSaveChanges(person);
            Context.SaveChanges();
        }
    }

    public void Foo()
    {
        Person p = new Person { name = "John", age = 20 }
        Add(p);
        Int32 id = p.id;  // id contains the newly inserted object's id
    }
4 голосов
/ 25 апреля 2009

Вот пример того, как это работает:

var dc = new MyDataContext();
var cust = new Customer{FirstName="John", LastName="Smith"};
dc.Customer.InsertOnSubmit(cust);
dc.SubmitChanges();
//after SubmitChanges(), the Id is filled from the database
var customerPrimaryKey = cust.Id;
1 голос
/ 25 апреля 2009

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

1 голос
/ 25 апреля 2009

Если модель настроена правильно, PK должен быть установлен на затронутый объект (тот, который вы только что вставили) автоматически.

НТН.

Сет

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

Вы вызываете метод SubmitChanges () для своего контекста данных после вставки записи? Набор изменений не будет оцениваться до тех пор, пока вы его не сделаете.

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