EF Core2.1.0はデフォルトの文字列の長さと列タイプを設定します

フクロウガラス

Entity Frameworkはnvarchar(max)文字列のデフォルトとして使用するので、他のものをデフォルトとして設定したいと思います。

https://dba.stackexchange.com/questions/48408/ef-code-first-uses-nvarcharmax-for-all-strings-will-this-hurt-query-performan

Entity Framework 6.1.3では、次のOnModelCreating(DbModelBuilder modelBuilder)ように変更できます。

modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2"));
modelBuilder.Properties<DateTime>().Configure(c => c.HasPrecision(0));

modelBuilder.Properties<string>()
    .Configure(s => s.HasMaxLength(256).HasColumnType("nvarchar"));

次に、データ注釈を使用してプロパティを変更した場合、EFは代わりに次のようにこれらの値を使用しました。

[MaxLength(128)]
public string Name { get; set; }

[Column(TypeName = "nvarchar(MAX)")]
[MaxLength]
public string Comment { get; set; }

しかしMicrosoft.EntityFrameworkCore.SqlServer 2.1.0、私はこのようにそれを行うことができず、私も使用することはできませんConventions

datetimeこのように解決することはできますが、文字列に対して同じことを行おうとすると、type: "nvarchar(256)", maxLength: 128たとえばデータ注釈を使用すると移行によって示されます。どうすればこれを解決できますか?

foreach (var property in modelBuilder.Model.GetEntityTypes()
    .SelectMany(t => t.GetProperties())
    .Where(p => p.ClrType == typeof(DateTime)))
{
    property.Relational().ColumnType = "datetime2(0)";
}
Ivan Stoev

stringプロパティの列タイプに間接的に影響を与えるいくつかの属性があります- MaxLength(eg varchar(256)vs varchar(MAX)IsUnicode(eg nvarcharvs varchar)およびIsFixedLength(eg charvs varchar)。

現在のモデルAPIには一貫性がありません。最初のアクセスを介して行われるGetMaxLengthSetMaxLength、第二-介しIsUnicodeIsUnicode、及び第三の一方(のみ流暢API)のための公共モデルAPIは存在しません。

したがって、を設定するには、MaxLength次のものを使用できます。

foreach (var property in modelBuilder.Model.GetEntityTypes()
    .SelectMany(t => t.GetProperties())
    .Where(p => p.ClrType == typeof(string)))
{
    if (property.GetMaxLength() == null)
        property.SetMaxLength(256);
}

nullこの場合指定されていないとの二重の意味があるため、これは完全には正しくありませんMAX

正しい方法では、EF Core内部APIを使用する必要があります。これにより、さらに多くの構成メソッドが提供され、特にConfigurationSource属性値とともに列挙値を渡すことができますConfigurationSourceenum値は、設定の優先順位を定義する-とConvention、次いで、最低であるDataAnnotationと最終的にはExplicit最高です。全体的な考え方は、優先度の低い構成は、優先度の高い構成によって既に設定されている構成を上書きしないということです。すべてのパブリックFluentAPIはを使用しますがExplcit、この場合はConvention完全に適合します(従来のデフォルトをシミュレートしているため)。

したがって、「このAPIはEntity Framework Coreインフラストラクチャをサポートしており、コードから直接使用するためのものではありません。このAPIは、将来のリリースで変更または削除される可能性があります。」という警告を受け入れる場合、 追加

using Microsoft.EntityFrameworkCore.Metadata.Internal;

と使用

foreach (var property in modelBuilder.Model.GetEntityTypes()
    .SelectMany(t => t.GetProperties())
    .Where(p => p.ClrType == typeof(string)))
{
    property.AsProperty().Builder
        .HasMaxLength(256, ConfigurationSource.Convention);
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

.NET Core EF Core2モデルを1つのビューで作成操作

分類Dev

ASP.NET Core 2 MVC + EF Core2またはAngular5

分類Dev

EF Core2のクロスデータベース移行

分類Dev

EF Core2での単一のテーブル名の使用

分類Dev

AddForeignKeyOperationのため、SQLiteモデルをEF Core2にアップグレードできません

分類Dev

Entity Framework Core2のConnectionStringBuilder

分類Dev

EF Core2に.ThenIncludeのリポジトリメソッドを作成する方法

分類Dev

EF Core2の自己参照テーブルへのカスケード削除の実装

分類Dev

EF Core2のジェネリックエンティティ構成クラス

分類Dev

Asp.Net Core1をCore2に変換した後にJwtが機能しない

分類Dev

LINQ-EF Core2を使用するDIDbContextおよびModelを使用したコントローラーの単体テスト

分類Dev

ASP.NET Core2 +のILoggerとDependencyInjection

分類Dev

.NET Core2のStructureMapとProto.Actor

分類Dev

JQueryDatatablesを使用したCore2 MVC

分類Dev

.NET Core2で同等のReadAsMultipartAsync

分類Dev

ASP.NET Core2のweb.config

分類Dev

Entity Framework Core2移行の問題

分類Dev

.NET Core2のSystem.Web.ApplicationServices

分類Dev

EF Core-2-2 HasConversion Char(1)to bool

分類Dev

EF CORE:1つのデータベースで2つのモデルをサポートすることは可能ですか?

分類Dev

EF Core 2.0.0 FluentApiを使用した1対1またはゼロ

分類Dev

IntelDual-CoreとCore2 Duoの違いは何ですか?

分類Dev

efコア-1つの主キーに1対1で2つ

分類Dev

EF Core、列挙型に基づいて1対1の関係でデータをクエリする

分類Dev

ASP.NET Core2のフォルダーを除外します

分類Dev

Entity Framework Core2で主キーの設定を解除します

分類Dev

ViewModelをAPIASP.net Core2に送信します

分類Dev

database .net core2から特定の行を選択する

分類Dev

Core2ドメインモデルをデータベースの変更と同期させます

Related 関連記事

  1. 1

    .NET Core EF Core2モデルを1つのビューで作成操作

  2. 2

    ASP.NET Core 2 MVC + EF Core2またはAngular5

  3. 3

    EF Core2のクロスデータベース移行

  4. 4

    EF Core2での単一のテーブル名の使用

  5. 5

    AddForeignKeyOperationのため、SQLiteモデルをEF Core2にアップグレードできません

  6. 6

    Entity Framework Core2のConnectionStringBuilder

  7. 7

    EF Core2に.ThenIncludeのリポジトリメソッドを作成する方法

  8. 8

    EF Core2の自己参照テーブルへのカスケード削除の実装

  9. 9

    EF Core2のジェネリックエンティティ構成クラス

  10. 10

    Asp.Net Core1をCore2に変換した後にJwtが機能しない

  11. 11

    LINQ-EF Core2を使用するDIDbContextおよびModelを使用したコントローラーの単体テスト

  12. 12

    ASP.NET Core2 +のILoggerとDependencyInjection

  13. 13

    .NET Core2のStructureMapとProto.Actor

  14. 14

    JQueryDatatablesを使用したCore2 MVC

  15. 15

    .NET Core2で同等のReadAsMultipartAsync

  16. 16

    ASP.NET Core2のweb.config

  17. 17

    Entity Framework Core2移行の問題

  18. 18

    .NET Core2のSystem.Web.ApplicationServices

  19. 19

    EF Core-2-2 HasConversion Char(1)to bool

  20. 20

    EF CORE:1つのデータベースで2つのモデルをサポートすることは可能ですか?

  21. 21

    EF Core 2.0.0 FluentApiを使用した1対1またはゼロ

  22. 22

    IntelDual-CoreとCore2 Duoの違いは何ですか?

  23. 23

    efコア-1つの主キーに1対1で2つ

  24. 24

    EF Core、列挙型に基づいて1対1の関係でデータをクエリする

  25. 25

    ASP.NET Core2のフォルダーを除外します

  26. 26

    Entity Framework Core2で主キーの設定を解除します

  27. 27

    ViewModelをAPIASP.net Core2に送信します

  28. 28

    database .net core2から特定の行を選択する

  29. 29

    Core2ドメインモデルをデータベースの変更と同期させます

ホットタグ

アーカイブ