Entity Framework で関係をモデル化する方法について混乱しています。
ClassA
オプションで を指したいClassB
。これは、オプションの 1 対 1 の関係のように思えます。
ClassB
また、それを指す ClassA を常に指しておきたいと思います。ClassB
また、複数の が同じ を参照できるようにしたいと考えていClassA
ます。1 対多の関係のように聞こえます。
これは 1 つの関係としてモデル化するのが最適ですか、それとも実際には 2 つの完全に別個の関係ですか?
2 つの関係の場合、参照に使用される ClassB に表示される単一のプロパティ「ClassAKey」を共有できますClassA
か?
私の問題では、OMをどうしたいかは頭の中で明らかです。
ClassA
{
[Key]
int Key { get; set; }
ClassB Maybe { get; set; }
int MaybeKey { get; set; }
}
ClassB
{
[Key]
int Key { get; set; }
ClassA Always { get; set; }
int AlwaysKey { get; set; }
}
また、DB でどのように表示されるかは、頭の中で明確です。それぞれが相互に参照できるように、1 つの列と 1つのClassAKey
列だけが存在し、これらの列の外部キー関係が必要です。ClassB
ClassBKey
ClassA
しかし... EFでこれをモデル化する方法が何であるかは明確ではありません。実際、私は何か間違ったことをしているに違いないようです!上記のコードから始めると、エラーが発生します。
Unable to determine the principal end of an association between the types 'ClassA' and 'ClassB'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.
このように設定しようとすると、
modelBuilder.Entity<ClassA>()
.HasOptional(a => a.Maybe)
.WithRequired(b => b.Always);
何らかの理由で、ClassB が間違った外部キー プロパティを持つ場所で生成された間違ったデザイナー コードのように見えるものを取得します。
.ForeignKey("dbo.ClassAs", t => t.Key)
t.AlwaysKey のはずですよね?どうしたの!?