当实体映射到存储过程时,在调用SaveChanges()之后获取实体的标识可以通过以下步骤实现:
public class MyEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
// 其他字段
}
CREATE PROCEDURE InsertMyEntity
@Param1 NVARCHAR(MAX),
@Param2 NVARCHAR(MAX),
-- 其他参数
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO MyEntity (Column1, Column2, -- 其他列)
VALUES (@Param1, @Param2, -- 其他参数)
SELECT SCOPE_IDENTITY()
END
public class MyDbContext : DbContext
{
// 其他代码
public int InsertMyEntity(MyEntity entity)
{
var parameters = new[]
{
new SqlParameter("@Param1", SqlDbType.NVarChar) { Value = entity.Column1 },
new SqlParameter("@Param2", SqlDbType.NVarChar) { Value = entity.Column2 },
// 其他参数
};
return this.Database.ExecuteSqlRaw("EXEC InsertMyEntity @Param1, @Param2, -- 其他参数", parameters);
}
}
using (var context = new MyDbContext())
{
var entity = new MyEntity { Column1 = "Value1", Column2 = "Value2" };
var id = context.InsertMyEntity(entity);
entity.Id = id;
context.SaveChanges();
}
通过以上步骤,在调用SaveChanges()之后,可以获取实体的标识。
领取专属 10元无门槛券
手把手带您无忧上云