2012-03-23 14 views
0

は私のシナリオ(テーブル)である:従業員と部門:私はEDMXモデルにこれらの3つのテーブルをインポートするとは、相互参照表を持つエンティティモデルの作成 - ここEntityFramework 4.1

Departments 
==================== 
Id (int) 
Name (varchar) 

Employees 
==================== 
Id (int) 
Name (varchar) 

EmployeesDepartmentXREFs 
==================== 
EmployeeId (int) 
DepartmentId (int) 

、私は2つのエンティティを取得します。エンティティ従業員はナビゲーションプロパティを持ちます部門とエンティティ部門はナビゲーションプロパティを持ちます従業員。

これはすべて問題ありません。私は実際にこのようにそれが好きです。

しかし、XREFテーブルにフィールドを追加したいときに問題が発生します。例えば、DateCreatedフィールド、UserIdフィールド、変更があったときに記録するフィールド、そして誰によって登録されているのかなどです。これら2つのフィールドをXREFテーブルに追加すると、EDMXモデルでは2つではなく3つのエンティティが表示されます。それは大きな問題ではありませんが、私はすでにコーディングを行っているので、私はコーディングを避けるための簡単な解決策を探しています。

質問:XREF(相互参照)テーブルに新しいフィールドを追加したり、2つのエンティティのみを保持することはできますか?「はい」の場合は、日時とユーザーIDの情報をどのように更新しますか?

IはXREFエンティティが(日付とユーザIDと)、それを更新することができるようにするために存在しなければならないと仮定し、私は実際にナビゲーション特性を有するように:部門社員、ナビゲーション特性を有する対従業員区分XREFs

中程度の理由はありますか?ベストプラクティスは何ですか?

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

答えて

1

最初にモデルで動作するかどうかは完全にはわかりませんが、NotMappedAttributeを使用できます。私はこれが第3のエンティティを表示するのを修正するかどうかは特に分かりませんが、それは間違いなく見下ろす道です。

UPDATE

周りを探した後、私はそれがあるようなコード-最初の(私は信じています流暢なAPIを経由してマッピングテーブル内の二つ以上の列ができます)前の音と、あなたに合った、this MSDN forum questionを見つけました問題。

流暢なAPIを試してみることもできますが、もう一度、これがモデルファーストのために何かを修正するかわかりません。 Here is a good stack overflow question that shows how to use the fluent api to map the columns together.

最終、Here is a good article on your problem.

うまくいけば、これは/あなたのために物事を明確に役立ちます。

+0

私が欲しいものはできないようです。私の知らなかったFluent APIについての記事を読んでくれました。 :-)私はそれについてもっと見ていきます。 – bobetko

1

あなたが読み取り専用のヘルパープロパティを作成することができます。

public class Department 
{ 
    //... 
    public ICollection<EmployeesDepartment> EmployeesDepartments { get; set } 

    // because here is only a getter the property is ignored for mapping to DB 
    public IEnumerable<Employee> Employees 
    { 
     get { return EmployeesDepartments.Select(ed => ed.Employee); } 
    } 
} 

をしかし、これはあなたがどちらかがすでにデータベースからEmployee含むEmployeesDepartmentsをロードしたり、(virtualとしてマークナビゲーションプロパティ)遅延ロードを使用することをしていることを必要とし、部門がロードされたコンテキストはまだ処分されていません。また、このプロパティは、DepartmentEmployeeの間の関係を追加または削除するためには役に立たない。

とにかく、カスタムコードを書く必要があります。自動getterとsetterでプロパティを導入し、中間のエンティティを何とか "スキップ"するマッピングを指定する方法はありません。ジョイン・テーブルにプロパティを追加すると、モデルに多対多リレーションシップがなくなり、ベストプラクティスは2つの1対多リレーションシップと見なされることです。

関連する問題