一、表名映射

我们知道:如果是在默认情况下,使用EFCore Code First的方式生成的表名跟数据上下文类中定义的实体属性的名称是一致的,例如:

public DbSet Bloges123 { get; set; }

这里定义的属性名称是Bloges123,那么最后数据库中生成的表名也叫Bloges123。看下面的测试。

我们首先添加迁移,每次迁移都会生成一个对应的迁移记录类,代码如下图所示:

f64f9c814fc0dd3221b7fc33ddd5f701.png

可以看到,这里显示创建表的名称就是Bloges123。最后更新数据库,更新完成以后查看数据库生成的表名:

fed61ce345f782f563670842c8bd0bfa.png

可以看到:数据库里面最终生成的表名就是配置的实体属性的命名。如果我们不想使用自动生成的表名,那该怎么办呢?这时候就需要做表名映射了,在代码里面设置最后生成的数据库表名。

如果要做映射,需要在数据上下文类中重写父类的OnModelCreating方法,里面有一个ToTable()的方法,里面的参数就是你想生成的表名,如下图所示:

75c656839b1c44d09a29fc8c3c1fb55a.png

修改后的数据上下文类代码如下:

usingEFCore.Model;usingMicrosoft.EntityFrameworkCore;namespaceEFCore.Data

{///

///数据上下文///

public classEFDbContext : DbContext

{protected override voidOnConfiguring(DbContextOptionsBuilder optionsBuilder)

{

optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=EFTest;User ID=sa;Password=123456;");

}public DbSet Blogs { get; set; }///

///重写OnModelCreating方法,配置映射///

///

protected override voidOnModelCreating(ModelBuilder modelBuilder)

{//配置表名映射

modelBuilder.Entity().ToTable("Blog");base.OnModelCreating(modelBuilder);

}

}

}

这样设置完成以后,我们在次使用数据迁移的方式来生成数据库,看看最终结果。添加迁移以后生成的迁移记录类:

07764fb8a74ab70c0396b868a3410faa.png

可以看到:迁移记录类里面显示生成的表名是我们自己配置的表名,然后更新数据库,查看数据库表名:

b6e2b8cb28716b2f2de889fb76420601.png

这样就完成了表名映射,最终生成的就是我们自己配置的表名。

注意:设置表名的时候有一个限制:表名最大长度限制为128。

我们修改代码,设置的表名长度超过128看看效果:

var tableName = string.Join("", Enumerable.Repeat("t", 250).ToArray());

modelBuilder.Entity().ToTable(tableName);

使用迁移的方式生成数据库查看效果:

ac930bb86c17066b1455e0c6fe727ae5.png

可以看到,在更新数据库的时候报错了,提示超过了最大长度。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐