C# 在.NET Core中使用DbModelBuilder来指定命名约定
在.NET中,我通常能够以以下方式指定所有列和表的命名约定C# 在.NET Core中使用DbModelBuilder来指定命名约定,c#,.net,.net-core,dbcontext,C#,.net,.net Core,Dbcontext,在.NET中,我通常能够以以下方式指定所有列和表的命名约定 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder .Properties() .Where(p => p.Name == p.DeclaringType.Name + "_ID") .Configure(p => p.IsKey()); bas
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder
.Properties()
.Where(p => p.Name == p.DeclaringType.Name + "_ID")
.Configure(p => p.IsKey());
base.OnModelCreating(modelBuilder);
}
但在.NETCore中,我找不到这样做的方法。当我重写.NET core中从DbContext继承的XYZContext中的OnModelCreating()时,我只有一个
是否有方法在.NET core中执行上述操作,或者我必须手动指定每一列?
ModelBuilder
允许类似的功能:
var keyProperties = modelBuilder
.Model
.GetEntityTypes()
.SelectMany(e => e.GetProperties())
.Where(p => p.Name == p.DeclaringEntityType.ClrType.Name + "_ID")
.ToList();
foreach (var p in keyProperties)
{
modelBuilder
.Entity(p.DeclaringEntityType.Name)
.HasKey(p.Name);
}
ModelBuilder
允许类似的功能:
var keyProperties = modelBuilder
.Model
.GetEntityTypes()
.SelectMany(e => e.GetProperties())
.Where(p => p.Name == p.DeclaringEntityType.ClrType.Name + "_ID")
.ToList();
foreach (var p in keyProperties)
{
modelBuilder
.Entity(p.DeclaringEntityType.Name)
.HasKey(p.Name);
}
它内置于ModelBuilder中 调用
modelBuilder.Model.GetEntityTypes()
获取类型
要更改表名,请使用以下代码行
entityType.Relational().TableName = ConvertToUpperCaseUnderscore(entityType.ClrType.Name);
要使用相同的约定将属性映射到列,请调用entityType.GetProperties()
以获取属性列表,并映射列名
因此,总体使用率是
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
if (entityType.ClrType == null)
{
continue;
}
// Set the table name mapping for the class
entityType.Relational().TableName = ConvertToUpperCaseUnderscore(entityType.ClrType.Name);
var props = entityType.GetProperties().ToList();
foreach (var p in props)
{
// Set the column name mapping for the class
p.Relational().ColumnName = ConvertToUpperCaseUnderscore(p.Name);
}
}
base.OnModelCreating(modelBuilder);
}
它内置于ModelBuilder中 调用
modelBuilder.Model.GetEntityTypes()
获取类型
要更改表名,请使用以下代码行
entityType.Relational().TableName = ConvertToUpperCaseUnderscore(entityType.ClrType.Name);
要使用相同的约定将属性映射到列,请调用entityType.GetProperties()
以获取属性列表,并映射列名
因此,总体使用率是
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
if (entityType.ClrType == null)
{
continue;
}
// Set the table name mapping for the class
entityType.Relational().TableName = ConvertToUpperCaseUnderscore(entityType.ClrType.Name);
var props = entityType.GetProperties().ToList();
foreach (var p in props)
{
// Set the column name mapping for the class
p.Relational().ColumnName = ConvertToUpperCaseUnderscore(p.Name);
}
}
base.OnModelCreating(modelBuilder);
}
检查这个检查这个太棒了,谢谢!我正准备发布答案,因为我从另一条线索中得出了答案。太棒了,谢谢!我正准备发布答案,因为我是从另一个帖子中得出的