Как получить значение первичного ключа при вставке новой записи?

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

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

6 ответов


yes (предполагая, что это поле идентификатора).

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

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

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


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

    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
    }

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

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;

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

HTH.

сет


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


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