在尝试将OnModelCreating
方法用作ASP.net的一部分之前,我试图对其进行重构::
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Types().Configure(c => c.ToTable(c.ClrType.Name.ToUpper()));
modelBuilder.Properties().Configure(c => c.HasColumnName(c.ClrPropertyInfo.Name.ToUpper()));
....
但是现在迁移到.netCore 3.1之后,我得到了这个错误
'ModelBuilder'不包含'Types'的定义,找不到可以接受的扩展方法'Types'接受类型为'ModelBuilder'的第一个参数
能否请您提出一种在保持相同的旧逻辑的同时正确重构代码的方法
感谢您的帮助
答案 0 :(得分:1)
根据您的代码,您似乎想要更改表名称并设置列名称,如果是这种情况,则可以尝试引用以下代码来覆盖OnModelCreating方法:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<Blog> Blogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//Write Fluent API configurations here
//Property Configurations
modelBuilder.Entity<Blog>().ToTable("BLOGS");
modelBuilder.Entity<Blog>()
.Property(b => b.BlogId)
.HasColumnName("BLOG_ID");
}
}
更多详细信息,请检查以下链接:
EF Core Fluent API Configuration
How to Specify Entity Framework Core Table Mapping?
修改:
第二个配置规则呢? modelBuilder.Properties()。Configure(c => c.HasColumnName(c.ClrPropertyInfo.Name.ToUpper()));我不能经历 在那里的每一列都只是使其大写
有一个开源插件(Naming Conventions)可能会对您有所帮助。通过使用其UseUpperCaseNamingConvention,可以将表和列名称更改为大写。
您可以参考以下步骤来使用它:
从Nuget中添加EFCore.NamingConventions。
在模型的OnConfiguring方法中启用命名约定:
public class SchoolContext : DbContext
{
public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
{
}
public DbSet<Customer> Customers { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.EnableSensitiveDataLogging();
optionsBuilder
.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=TestDB;Trusted_Connection=True;MultipleActiveResultSets=true") //database connection string.
.UseUpperCaseNamingConvention();
}
}
迁移后,您可以看到“模型快照”,它将更改表和列的名称,如下所示:
然后,在更新数据库后,如下表:
[注意]命名约定是社区维护的插件:它不是Entity Framework Core的正式组成部分,并且不受Microsoft的任何支持。