EF Core Fluent API、すべてのエンティティにIsRequiredを設定して、null以外のdb列を生成します

マイク。

私はdbコンテキストで直接動作するRazorページのWebアプリに取り組んでいます...はい、これは理想的ではありませんが、当分の間私が立ち往生しているものです。

データモデルでは、各オブジェクトは監査データを含む基本エンティティクラスから継承します。例:

public class BaseEntity
{
    [Key]
    public int Id { get; set; }

    public DateTime CreatedOn { get; set; }
    public string CreatedBy { get; set; }
    ...etc.

public class Table1 : BaseEntity
{
    public string TestItemName { get; set; }
}

データベースで、CreatedByを必須(nullではない)にしたいのですが、[Required]属性を使用したくないのは、これによりUIがトリガーされてCreatedBy列が検証されるためです。この列をUIに公開したくないので、代わりに、追加/挿入に基づいてすべての監査プロパティを更新するサービスコードを用意します。

私が探しているのは、Fluent APIを介した方法で、必要なデータベースの列タイプ(NVARCHAR(MAX)NOT NULLなど)を取得します。

これは、dbcontextのOnModelCreatingメソッドで実行できます。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Table1>()
        .Property(o => o.CreatedBy)
        .IsRequired();

ただし、これには、モデル内のすべてのテーブルに対して同様のエントリを作成する必要があります。

すべてのエンティティに対してこれを実現できるOnModelCreatingで使用できるコードはありますか?このようなもの(これは単なる擬似コードですが、アイデアを提供しようとしています):

var entityTypes = modelBuilder.Model.GetEntityTypes().Select(o => o.GetType()).ToList();
entityTypes.ForEach(e =>
{
    e.Property("CreatedBy").IsRequired();
});
Moho

を実装する個別のクラスにエンティティ構成を実装しますIEntityTypeConfiguration実装は、構成する基本実装から継承する必要がBaseEntityあり、Configureメソッドは仮想であり、基本クラスのメソッドを呼び出す実装をオーバーライドする必要があります。

public abstract class BaseEntityConfiguration<TEntity>
    : IEntityTypeConfiguration<TEntity>
        where TEntity : BaseEntity
{
    public virtual void Configure(EntityTypeBuilder<TEntity> builder)
    {
        builder.Property(be => be.CreatedBy)
            .IsRequired();

        // etc
    }
}

public class SomeEntityConfiguration : BaseEntityConfiguration<SomeEntity>
{
    public override void Configure(EntityTypeBuilder<SomeEntity> builder)
    {
        // call base class method to configure BaseEntity properties
        base.Configure(builder);

        // configure remaining SomeEntity-specific properties/etc
        builder.TestItemName.IsRequired();
    }
}

構成クラスを使用するようにモデルビルダーに通知する必要があります。たとえば、構成クラスがDbContextと同じアセンブリにある場合

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.ApplyConfigurationsFromAssembly(
        typeof(YourDbContext).Assembly);
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

EF Core Fluent API(主キーからIDを削除する方法)

分類Dev

EF Fluent API:基本抽象クラスから派生した各エンティティのプロパティを設定します

分類Dev

EF Core 2.1 [変更追跡]-関連するすべてのエンティティを保存する

分類Dev

EF Core 5で、最初にクエリを実行せずに、外部キーIDのみを設定して、多対多の関係を持つエンティティを挿入するにはどうすればよいですか?

分類Dev

EF Core 2.1:1対多の関係を持つ自己参照エンティティは追加の列を生成します

分類Dev

EF Core3.0のすべてのテーブルに共通のベースエンティティ

分類Dev

EF Core 2.1 HasData()は、後続の移行時に変更されていないエンティティの削除と再挿入を作成します

分類Dev

.net Core 2.2 EF:SaveChangesAsync()は、無関係の列をnullに設定します

分類Dev

EF6.1 optional-to-optional with fluent api mapping

分類Dev

EF5 Code First - Data Annotations vs Fluent API

分類Dev

Ef Core 3エンティティタイプXOrderは、Orderから派生しているため、テーブルにマップできません。ベースエンティティタイプのみをテーブルにマップできます。

分類Dev

EF Coreの基本DbContextクラスを使用してエンティティにアクセスするにはどうすればよいですか?

分類Dev

EF Core 5は、一部のエンティティにシャドウ代替キーを追加しますが、プロパティを使用しません

分類Dev

EF Fluent apipocoの生成と既存のDbを使用したマッピング

分類Dev

EF Coreで、所有エンティティとの複合一意制約/インデックスを生成します

分類Dev

EF Core は、関係を設定するときに null を設定します

分類Dev

EF Core 2.0エンティティのリストに基づいてプロパティを計算する場合、2つのSaveChanges()が必要です。

分類Dev

EF Core 3.1は、エンティティ間の主キー関係を定義するときに、名前に「1」が含まれる重複列を作成します

分類Dev

EF Core 3.1は、特定の列を選択して更新します

分類Dev

EF Core 5.0を使用して自己参照エンティティをロードします(ナビゲーションプロパティで親とその子を取得するだけです)

分類Dev

MySQL用のEF6Fluent APIを使用してテーブルタイプを指定するにはどうすればよいですか?

分類Dev

EF Core 2.2、階層内で複数の場合に別のテーブルとして生成される所有エンティティ

分類Dev

JSONをEF Coreのエンティティフィールドに格納する方法は?

分類Dev

where条件を使用すると、EF Core2.0は関連エンティティをロードしません

分類Dev

すべての列を選択し、EF Core、.NET Coreで指定されたタイプを返します

分類Dev

必要な関係が無効になっているのに、EF Coreがエンティティを削除するのはなぜですか?

分類Dev

.Net Core Fluent API、Nullable参照タイプ

分類Dev

EF Core2.0でIEntityTypeConfigurationを使用してForeignKeyプロパティとIndexプロパティを設定する方法

分類Dev

EF Core 5.0-「クエリの定義」にマップされたエンティティを変更するときに移行を生成する必要がありますか?

Related 関連記事

  1. 1

    EF Core Fluent API(主キーからIDを削除する方法)

  2. 2

    EF Fluent API:基本抽象クラスから派生した各エンティティのプロパティを設定します

  3. 3

    EF Core 2.1 [変更追跡]-関連するすべてのエンティティを保存する

  4. 4

    EF Core 5で、最初にクエリを実行せずに、外部キーIDのみを設定して、多対多の関係を持つエンティティを挿入するにはどうすればよいですか?

  5. 5

    EF Core 2.1:1対多の関係を持つ自己参照エンティティは追加の列を生成します

  6. 6

    EF Core3.0のすべてのテーブルに共通のベースエンティティ

  7. 7

    EF Core 2.1 HasData()は、後続の移行時に変更されていないエンティティの削除と再挿入を作成します

  8. 8

    .net Core 2.2 EF:SaveChangesAsync()は、無関係の列をnullに設定します

  9. 9

    EF6.1 optional-to-optional with fluent api mapping

  10. 10

    EF5 Code First - Data Annotations vs Fluent API

  11. 11

    Ef Core 3エンティティタイプXOrderは、Orderから派生しているため、テーブルにマップできません。ベースエンティティタイプのみをテーブルにマップできます。

  12. 12

    EF Coreの基本DbContextクラスを使用してエンティティにアクセスするにはどうすればよいですか?

  13. 13

    EF Core 5は、一部のエンティティにシャドウ代替キーを追加しますが、プロパティを使用しません

  14. 14

    EF Fluent apipocoの生成と既存のDbを使用したマッピング

  15. 15

    EF Coreで、所有エンティティとの複合一意制約/インデックスを生成します

  16. 16

    EF Core は、関係を設定するときに null を設定します

  17. 17

    EF Core 2.0エンティティのリストに基づいてプロパティを計算する場合、2つのSaveChanges()が必要です。

  18. 18

    EF Core 3.1は、エンティティ間の主キー関係を定義するときに、名前に「1」が含まれる重複列を作成します

  19. 19

    EF Core 3.1は、特定の列を選択して更新します

  20. 20

    EF Core 5.0を使用して自己参照エンティティをロードします(ナビゲーションプロパティで親とその子を取得するだけです)

  21. 21

    MySQL用のEF6Fluent APIを使用してテーブルタイプを指定するにはどうすればよいですか?

  22. 22

    EF Core 2.2、階層内で複数の場合に別のテーブルとして生成される所有エンティティ

  23. 23

    JSONをEF Coreのエンティティフィールドに格納する方法は?

  24. 24

    where条件を使用すると、EF Core2.0は関連エンティティをロードしません

  25. 25

    すべての列を選択し、EF Core、.NET Coreで指定されたタイプを返します

  26. 26

    必要な関係が無効になっているのに、EF Coreがエンティティを削除するのはなぜですか?

  27. 27

    .Net Core Fluent API、Nullable参照タイプ

  28. 28

    EF Core2.0でIEntityTypeConfigurationを使用してForeignKeyプロパティとIndexプロパティを設定する方法

  29. 29

    EF Core 5.0-「クエリの定義」にマップされたエンティティを変更するときに移行を生成する必要がありますか?

ホットタグ

アーカイブ