You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Entity Framework Core 2拥有实体类型:修改表列名移除下划线

如何修改EF Core中Owned实体的列命名(移除下划线)

嗨,这个问题我之前也碰到过,EF Core默认给Owned实体生成的列名会带下划线分隔,要改成ContactName这种格式,有两种实用的方案可以选:

方案一:全局统一配置(适合所有Owned实体)

如果希望所有Owned实体的列名都自动去掉下划线改成大驼峰格式,可以在你的DbContextOnModelCreating方法里添加全局配置逻辑:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // 遍历所有实体的Owned类型,统一修改列名格式
    foreach (var entityType in modelBuilder.Model.GetEntityTypes())
    {
        foreach (var ownedEntityType in entityType.GetOwnedTypes())
        {
            foreach (var property in ownedEntityType.GetProperties())
            {
                // 将"前缀_属性名"格式转换为"前缀属性名"的大驼峰格式
                var nameParts = property.Name.Split('_');
                if (nameParts.Length == 2)
                {
                    var newColumnName = $"{nameParts[0]}{char.ToUpperInvariant(nameParts[1][0])}{nameParts[1].Substring(1)}";
                    property.SetColumnName(newColumnName);
                }
            }
        }
    }

    // 其他实体配置代码...
}

这样所有类似Contact_Name的列都会自动变成ContactName,不用逐个实体去设置,非常省心。

方案二:单独配置指定Owned实体(灵活精准)

如果你只需要修改Bike里的Contact实体列名,不想影响其他Owned实体,可以直接在OnModelCreating里针对BikeContact属性做单独配置:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Bike>(bike =>
    {
        bike.OwnsOne(b => b.Contact, contact =>
        {
            contact.Property(c => c.Name).HasColumnName("ContactName");
            contact.Property(c => c.Email).HasColumnName("ContactEmail");
            contact.Property(c => c.Phone).HasColumnName("ContactPhone");
        });
    });

    // 其他实体配置代码...
}

这种方式可以精准控制单个Owned实体的列名,适合只需要修改特定实体的场景。

配置完成后,重新生成迁移文件(Add-Migration命令),你就能看到生成的列名已经变成你想要的格式了。

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

火山引擎 最新活动