使用实体框架插入时有条件地设置“标识”字段

本文关键字:设置 标识 字段 有条件 实体 框架 插入 | 更新日期: 2023-09-27 18:31:28

我正在使用带有实体框架的Firebird ADO.NET 提供程序,但此问题也适用于其他提供程序。

我的模型上有一个字段,如下所示

    [Column("JOBNO"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int JobNo { get; set; }

在数据库中,我有一个"插入时"触发器,如果JOBNO设置为NULL,则使用生成器更新JOBNO字段

通过将 DatabaseGenerated 属性设置为DatabaseGeneratedOption.Identity我的模型字段,实体框架可以在插入时正确地从数据库中提取JOBNO

但是有时我想在插入时手动指定JOBNO列,但 EF 不理解,只使用生成的值。

有没有办法允许DataBaseGenerated字段的这种条件设置?

使用实体框架插入时有条件地设置“标识”字段

没有办法对数据库生成的字段进行条件设置

第一个选项:是将插入触发器的行为转移到应用程序(而不是数据库),这样您将始终从应用程序生成 id。

第二个选项:不是指定标识并在数据库上保留为 NULLABLE。这样,你将允许 EF 接收数据,当它未收到时,你将从触发器获取值。 (但请确保更改触发器,以便在未提供时创建一个新 id!