質問: 私は2つのテーブルがあります。 要件 * ID(整数)PK * ClientID(int) * JobNumber(int) コメント * ID(整数)PK * Job_ID(int) * コメント(varchar) テーブルには外部キーがなく、追加することはできません。 EFでそれらをマッピングしようとしています。それぞれにクラスがあり、Comment.Job_IDをRequirement.JobNumberにマッピングするために、流暢なコードで関係を定義しようとしています。要件には多くのコメントがあります。要件にはコメントのリストがあり、コメントには要件プロパティがあります。 私はこのマッピング設定をしています: ``` modelBuilder.Entity().HasRequired(c => c.Requirement) .WithMany(s => s.Comments) .HasForeignKey(f => f.Job_ID); ``` Comment.Job_IDをRequirement.JobNumberにマッピングしようとしています。 任意の助けをいただければ幸いです。
回答: 不可能です。 Entity Frameworkでは、 `Comment.Requirement`ナビゲーションプロパティが参照しているエンティティは、通常、 `Requirement` (主)キープロパティ、つまり`ID`によって識別され`ID` 。ターゲットプロパティがキープロパティ以外のものであることを定義するマッピングオプションはありません - `JobNumber`や他の非キープロパティのように。 モデル内の主キープロパティを`ID`ではなく`JobNumber`に「偽造」できることを想像することしかできませんでした( `JobNumber`が`Requirement`テーブルで一意であると`JobNumber`した場合)。 ``` modelBuilder.Entity().HasKey(r => r.JobNumber); ``` それが他の望ましくない副作用をもたらす可能性があるかどうか私は知りません。 ( `JobNumber`が一意で*ない*場合は確実に機能しません。これは、EFが同じキーを持つ複数のエンティティをコンテキストにアタッチしたり、更新/削除したりすることを許可しないためです。それは私には間違っていてハッキーな気がします。データベースに実際の外部キーの関係がないという事実を`Comment.Requirement` 、テーブルを関連付けるためにLINQのナビゲーションプロパティ`Requirement.Comments`と`Comment.Requirement`を忘れて手動`join`を使用`join`お`Comment.Requirement`します私は与えられた状況でそれらを必要とするようにデータ/実体。