7

私は2つのテーブルを持っています:

要件

  • ID(int)PK
  • ClientID(int)
  • JobNumber(int)

コメント

  • ID(int)PK
  • Job_ID(int)
  • コメント(varchar)

テーブルには外部キーがなく、追加する可能性はありません。私はそれらをEFにマッピングしようとしています。それぞれにクラスがあり、Comment.Job_IDをRequirement.JobNumberにマップするために、流暢なコードで関係を定義しようとしています。要件には多くのコメントを含めることができます。Requirementにはコメントのリストがあり、CommentにはRequirementプロパティがあります。

私はこのマッピング設定を持っています:

modelBuilder.Entity<Comment>().HasRequired(c => c.Requirement)
                    .WithMany(s => s.Comments)
                    .HasForeignKey(f => f.Job_ID);

Comment.Job_IDをRequirement.JobNumberにマップしようとして立ち往生しています。

助けていただければ幸いです。

4

1 に答える 1

8

不可能です。Entity Frameworkでは、Comment.Requirementナビゲーションプロパティが参照しているエンティティは、通常、の(プライマリ)キープロパティRequirement、つまり。によって識別されIDます。JobNumberターゲットプロパティがキープロパティ以外のもの(または別の非キープロパティなど)であることを定義するマッピングオプションはありません。

モデルの主キープロパティを(テーブル内で一意であるとすると)JobNumber代わりに「偽造」できると想像することしかできませんでした。IDJobNumberRequirement

modelBuilder.Entity<Requirement>().HasKey(r => r.JobNumber);

それが他の望ましくない副作用をもたらす可能性があるかどうかはわかりません。( EFは、同じキーを持つ複数のエンティティをコンテキストにアタッチすることを許可せず、更新/削除などでデータベース内の正しいレコードを見つけられないため、一意でない場合JobNumberは確かに機能しません。 )それは私にとって間違っていてハッキーだと感じます。私は正直にそれを試さないでしょう、データベースに実際の外部キー関係がないという事実に生き、ナビゲーションプロパティを忘れ、 LINQのマニュアルを使用してテーブルデータ/エンティティを必要に応じて関連付けます与えられた状況で。Requirement.CommentsComment.Requirementjoin

于 2012-11-21T20:35:59.350 に答える