使用Z.EntityFramework的SingleInsertAsync插入如何获取IDENTITY自增ID
解决SingleInsertAsync插入后无法获取自增ID的问题
Z Entity Framework Extensions的SingleInsertAsync方法默认不会将数据库生成的字段值(比如自增主键ID)回写到传入的实体对象中,所以插入后读取ID会得到默认值0,可通过以下方式解决:
方法1:单次调用启用输出映射
在调用SingleInsertAsync时传入配置委托,开启AutoMapOutputDirection参数即可触发回写逻辑,修改后的代码如下:
Specification newSpecification = db.Specifications.Create(); newSpecification.ID_Feature = featureID; newSpecification.Specification1 = specificationKey; // 新增配置开启输出值回写 await db.Specifications.SingleInsertAsync(newSpecification, options => { options.AutoMapOutputDirection = true; }); int id = newSpecification.ID; // 此时即可拿到数据库生成的真实ID
注意事项
- 确保实体的主键ID属性已正确配置为数据库生成的自增列,可通过特性标记:
public class Specification { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ID { get; set; } // 其他字段定义 }
- 如果你需要全局开启该配置,可以在项目启动时配置全局默认选项:
Z.EntityFramework.Extensions.EntityFrameworkManager.Defaults.AutoMapOutputDirection = true;
全局配置后所有SingleInsertAsync/BulkInsertAsync等扩展方法默认都会回写数据库生成的字段值,不需要每次调用单独传配置。
内容的提问来源于stack exchange,提问作者André Reichelt
相关产品推荐
相关产品推荐

