2

DataAnnotationsはFluentAPIメソッドと同じことをしますか?

たとえば、.HasRequired == [必須]ですか?

.HasKey == [Key]?

pkプロパティにClassNameID形式を使用している場合に、テーブルpkフィールドをClassNameClassNameIDとして生成したくない場合は、クラスキーを[Key]でマークするか、.HasKeyを使用する必要がありますか?

DataAnnotationsとFluentAPIの組み合わせを使用できますか?または、それはどちらか一方ですか?

関係する両方のクラスのM:M関係をマッピングする必要があります。

public class Foo
{
    public ICollection<Bar> Bars
}

public class Bar
{
    public ICollection<Bar> Foos
}

public class Context : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Foo>()
            .HasMany(f => f.Bars).WithMany(b => b.Foos)
            .Map(t =>
                {
                    t.MapLeftKey("FooID");
                    t.MapRightKey("BarId");
                    t.ToTable("FooBar");
                });

         modelBuilder.Entity<Bar>()
            .HasMany(b => b.Foos).WithMany(f => f.Bars)
            .Map(t =>
                {
                    t.MapLeftKey("FooID");
                    t.MapRightKey("BarId");
                    t.ToTable("FooBar");
                });
}

ありがとう。

4

1 に答える 1

3

DataAnnotationsとFluentAPIの組み合わせを使用できますか?または、それはどちらか一方ですか?

はい、組み合わせて使用​​できます。ただし、一般的にはどちらかを選択することをお勧めします。私は流暢な方が好きです。それは、エンティティクラスから特定の永続性の懸念を排除するからです。

DataAnnotationsはFluentAPIメソッドと同じことをしますか?

たとえば、.HasRequired == [必須]ですか?

.HasKey == [Key]?

はい。また、.IsRequired==[必須]

関係する両方のクラスのM:M関係をマッピングする必要があります

いいえ、関係の片側だけをマップする必要があります。両側をマップできますが、関係を変更する場合は、両方のコードセットを変更する必要があります。また、両側をマッピングする場合、両方のマッピングが同じ結果(つまり、データベース内の同じ外部キー宣言)に解決される必要があります。

pkプロパティにClassNameID形式を使用している場合に、テーブルpkフィールドをClassNameClassNameIDとして生成したくない場合は、クラスキーを[Key]でマークするか、.HasKeyを使用する必要がありますか?

はい。プロパティ名がIdまたはPersonId/ProductId / OrderId/WhateverEntityNameIdでない限り。慣例により、EFはこれらが重要なプロパティであると推測します。ただし、modelBuilderで.HasKeyを呼び出して、これを明示的にすることは決して害にはなりません。

于 2012-07-13T19:39:11.893 に答える