0

私はASP.Net MVCとEntity Frameworkの初心者です。そして、私はFluent APIを使ってある種の関係を設定することに固執しています。0〜1または1対1の関係で流暢なAPI関係を設定する方法

モデル

Public Class A 
{ 
    [Key] 
    public int AId {get; set;} 
    public string AName {get;set;} 
} 

モデルB

Public Class B 
{ 
    [Key] 
    public int BId {get; set;} 
    public string BName 
} 

ビジネスロジック:

  1. Aは独立して
  2. として存在することができる

    だから、私は2つのモデルを持っています

    Bも独立して存在する可能性があります

  3. しかし、たとえばあるシナリオでは、ユーザーがUIのテキストボックスに「2」を入力したとしましょう。このシナリオでは、AにBIdが格納されるようにします。

  4. BIdが表Aに存在し始めた後は、表Aに再び存在することはできません。

私はこの関係を設定したい理由は、BIdがAテーブルに格納されているときに、私はそれがいくつかのランダムな整数ではないことを確認する必要があるということです。私はBIdがAテーブルに格納されているという約束がBテーブルに実際に存在することを約束します。

私の思考:

私はOptional Unique Foreign Key Relationshipを必要としています。しかし、私はCodeFirst Fluent APIのアプローチでそれを達成する方法がわかりません

以下は今まで私が持っていたものです。

モデル

Public Class A 
{ 
    [Key] 
    public int AId {get; set;} 
    public string AName {get;set;} 
    public int BId {get;set;} 
    public virtual B {get;set;} 
} 

質問1: どんなタイプ: 私はテーブルに入札かつてとき、それはB表に 質問2 PKの存在でなければならないことを確認してくださいする方法エンティティrelatioshipの私は対処しているのですか? 1..0または1..1または何か他のもの?

dBModelBuilder.Entity<A>() 
        .HasOptional(r=> r.B) 
        ........ 

答えて

0

これを明示的に設定する必要はありません:

編集

私のような何かをしたいです。ちょうどAのFKプロパティをnullにすることができます。そして、あなたは必要なマッピングを作成します。 EG:流暢APIでこれを行うには

public class A 
{ 
    public int AID { get; set; } 
    public string Name { get; set; } 
    public int? BID { get; set; } 
    public virtual B B { get; set; } 
} 

public class B 
{ 
    public int BId { get; set; } 
    public string Name { get; set; } 
} 

は次のようになります。

 modelBuilder.Entity<A>() 
      .HasOptional(a => a.B) 
      .WithMany() 
      .HasForeignKey(a => a.BID); 
+0

しかし、私は流暢APIのアプローチを学びたいと思っています。私が主キー(EF)の規約に従わなかった場合はどうなりますか?どのように私はこの関係を設定していたのですか? – Unbreakable

+0

「しかし、私はFLuent APIのアプローチを学びたいです。」そして、ここから始めてください:https://msdn.microsoft.com/en-us/library/jj591620(v=vs.113) .aspx –

+0

先生、私は編集セクションで試行しました。あなたは親切に一度見ることができますか?私はそのようなものを欲しい。 – Unbreakable

関連する問題