当实体映射到存储过程时,如何在调用SaveChanges()之后获取实体的标识

Che*_*hev 5 .net c# sql-server entity-framework entity-framework-4

我们正在使用Entity Framework 4.0,我们有一个实体映射到我们的DBA提供的存储过程.映射详细信息中的Insert,Update和Delete函数都有自己的存储过程.

当使用映射到表的实体时,我能够添加新实体,调用dataContext.SaveChanges();然后自动实例化的新实体的ID属性将填充数据库中标识列的值.

当实体映射到存储过程时,如何实现?INSERT存储过程是否必须做一些特殊的事情和/或我是否必须做一些特别的事情dataContext.SaveChanges();

传统方式

var newCustomer = new Customer
{
    Name = "Fred",
    Age = 24
};

// newCustomer.Id is null

dataContext.Customers.Add(newCustomer);
dataContext.SaveChanges()

// newCustomer.Id is what database identity column was set to.
Run Code Online (Sandbox Code Playgroud)

映射到存储过程.

var newCustomer = new Customer
{
    Name = "Fred",
    Age = 24
};

// newCustomer.Id is null

dataContext.Customers.Add(newCustomer);
dataContext.SaveChanges()

// newCustomer.Id is null
Run Code Online (Sandbox Code Playgroud)

Lad*_*nka 9

如果您在数据库中使用Identity列,请确保您的存储过程包含:

SELECT Scope_Identity() AS Id
Run Code Online (Sandbox Code Playgroud)

打电话后 INSERT

还要确保实体模式中的PK已正确配置为StoreGeneratedPattern设置为Identity(如果您使用从数据库更新,则应自动配置)