Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET Core中使用DbModelBuilder来指定命名约定_C#_.net_.net Core_Dbcontext - Fatal编程技术网

C# 在.NET Core中使用DbModelBuilder来指定命名约定

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

在.NET中,我通常能够以以下方式指定所有列和表的命名约定

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);
}

检查这个检查这个太棒了,谢谢!我正准备发布答案,因为我从另一条线索中得出了答案。太棒了,谢谢!我正准备发布答案,因为我是从另一个帖子中得出的