首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

当实体映射到存储过程时,在调用SaveChanges()之后获取实体的标识可以通过以下步骤实现:

  1. 在实体类中定义一个自增主键字段,例如:
代码语言:csharp
复制
public class MyEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    // 其他字段
}
  1. 在数据库中创建一个存储过程,用于插入实体并返回自增主键值,例如:
代码语言:sql
复制
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
  1. 在DbContext中定义一个新的方法,用于调用存储过程并返回自增主键值,例如:
代码语言:csharp
复制
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);
    }
}
  1. 在业务逻辑中调用新定义的方法,并获取实体的标识,例如:
代码语言:csharp
复制
using (var context = new MyDbContext())
{
    var entity = new MyEntity { Column1 = "Value1", Column2 = "Value2" };
    var id = context.InsertMyEntity(entity);
    entity.Id = id;

    context.SaveChanges();
}

通过以上步骤,在调用SaveChanges()之后,可以获取实体的标识。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券