6

EFコードFirst Fluent APIでの外部キーの定義について質問があります。 私はこのようなシナリオを持っています:外部キーエンティティフレームワークコードの指定まず、Fluent Api

2人のクラスPersonとCar。私のシナリオでは、CarはPersonまたはNot(1つまたはゼロの関係)を割り当てることができます。 コード:私はPPPPPに外部キーPERSONIDの名前を変更したい私のサンプルで

public class Person 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class Car 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Person Person { get; set; } 
    public int? PPPPP { get; set; } 
} 

class TestContext : DbContext 
{ 
    public DbSet<Person> Persons { get; set; } 
    public DbSet<Car> Cars { get; set; } 

    public TestContext(string connectionString) : base(connectionString) 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Car>() 
        .HasOptional(x => x.Person) 
        .WithMany() 
        .HasForeignKey(x => x.PPPPP) 
        .WillCascadeOnDelete(true); 

     base.OnModelCreating(modelBuilder); 
    } 
} 

modelBuilder.Entity<Car>() 
      .HasOptional(x => x.Person) 
      .WithMany() 
      .HasForeignKey(x => x.PPPPP) 
      .WillCascadeOnDelete(true); 

しかし、私の関係はゼロに一つであり、私はWithManyメソッドを使用して間違えるんが、EFは、適切なマッピングを使用してデータベースを生成し、すべてがうまく動作怖い:私のマッピングでは、私は言います。

私のFluent APIコードが間違っている場合や、今のようにするのが良い方法であるとお考えください。

ありがとうございました。

答えて

3

ここで流暢なAPIの使用に問題はありません。 Personクラスのコレクションのナビゲーションプロパティ(例:Cars)を使用しない場合は、WithMany以下の引数を使用できます。

+0

回答ありがとうございます。 – patryko88

+0

Fluent APIのWithMany()部分を「1から1まで」の関係で使用するにはどうすればよいですか? @ patryko88あなたはあなたが望むようにあなたのコードを手に入れましたか?もしそうなら、回答を投稿できますか?ありがとう! –

+0

@BrianBehm EFでは、共有PKマッピングがある場合にのみ、一対一の関係の両側にナビゲーションプロパティを設定できます。 collectionプロパティを省略すると、関係はlike-like-one-one-oneになります。 – Eranga

関連する問題