Как я могу получить идентификатор вставленного объекта в инфраструктуре Entity при использовании defaultValue?
Есть ли способ отправить свойство с defaultValue, но обновить его с помощью вычисленного результата базы данных? Там триггер в базе данных, который для ввода -1 запускает процедуру, которая вычисляет новое значение. Как вернуть значение?
<Property Name="ID" Type="int" Nullable="false" StoreGeneratedPattern="None" DefaultValue="-1" />
var x = new Stuff();
db.Stuff.AddObject(x);
db.SaveChanges();
return x.ID //gives -1, but the computed value should be different.
Ответы
Ответ 1
Вам необходимо перезагрузить объект после сохранения. Поскольку он был изменен с помощью триггера базы данных, который не может быть отслежен EF. Итак, нам нужно перезагрузить объект снова из БД,
var x = new Stuff();
db.Stuff.AddObject(x);
db.SaveChanges();
db.Entry(x).GetDatabaseValues();
return x.ID;
Ответ 2
У меня была та же проблема, что мой ключ не будет обновляться после вызова SaveChanges
, и он вернет null для context.Entry(newObj).GetDatabaseValues()
.
В моем случае установка StoreGeneratedPattern
в Identity
(на ключ) в модели EntityFramework заставила ключ обновляться после вызова SaveChanges
.
Ответ 3
используя (var context = new EntityContext()) {
var customer = new Customer()
{
Name = "John"
};
context.Customers.Add(customer);
context.SaveChanges();
int id = customer.CustomerID;
}
Ответ 4
using (var context = new MyContext())
{
context.MyEntities.AddObject(newObject);
context.SaveChanges();
int id = newObject.Id; // Will give u the autoincremented ID
}