Как получить значение первичного ключа при вставке новой записи?
Я использую класс 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 () в контексте данных после вставки записи? Набор изменений не будет оцениваться, пока вы этого не сделаете.