You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Entity-Framework-Extensions BulkInsert时可空枚举引发EffortException

解决Entity Framework Extensions BulkInsert可空枚举转换问题
  • 用Fluent API配置枚举映射
    在DbContext的OnModelCreating方法里,强制指定枚举属性按整数类型存储,可空枚举同样适用:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<你的实体类>()
        .Property(e => e.MandatoryJobCommentType)
        .HasConversion<int>();
}

这个配置会让EF(包括EF Extensions的BulkInsert)始终用枚举对应的整数值处理,避免字符串转换问题。

  • 用数据注解指定列类型
    如果习惯用注解,直接在实体的枚举属性上加[Column(TypeName = "int")],前提是枚举本身基于int类型(默认就是):
public class 你的实体类
{
    [Column(TypeName = "int")]
    public MandatoryJobCommentType? MandatoryJobCommentType { get; set; }
}

// 枚举定义(默认int基类型,无需额外声明)
public enum MandatoryJobCommentType
{
    StateTransition = 1,
    // 其他枚举值
}

要是枚举不是int基类型,得显式声明,比如public enum MandatoryJobCommentType : int。

  • 配置BulkInsert的列类型
    可以在BulkInsert时显式指定列的类型,确保库正确转换枚举值:
var options = new BulkInsertOptions
{
    Columns = new List<BulkColumn>
    {
        new BulkColumn(nameof(你的实体类.MandatoryJobCommentType), typeof(int?))
    }
};

context.BulkInsert(待插入实体列表, options);
  • 调整Effort的模拟表结构
    如果以上配置还是没解决,可能是Effort的模拟数据库没正确识别类型,可以手动调整表结构:
var connection = DbConnectionFactory.CreateTransient();
var context = new 你的DbContext(connection);

// 手动修改列类型为可空int
context.Database.ExecuteSqlRaw("ALTER TABLE 你的表名 ALTER COLUMN MandatoryJobCommentType INT NULL");

内容的提问来源于stack exchange,提问作者Alastair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 05:12:41