2017-01-05 5 views
0

タイトルはちょっと混乱しますが、私はそれを置く他の方法は考えられませんでした。そこで例を挙げて説明します。Entity Frameworkで外部キーIDを外部キーIDまたはそのテーブルのC#モデルとして格納する必要がありますか?

StudentSchoolクラスに属し、Schoolは、多くの学生を持つことができる、のは、私はStudentクラスがあるとしましょう。私たちは、その後Schoolモデルのために書く傾向にあることである:

public class School 
{ 
    public int ID { get; set; } 
    public virtual ICollection<Student> Students { get; set; } 
} 

そしてStudentモデル用:

public class Student 
{ 
    public int ID { get; set; } 
    public virtual School School { get; set; } 
} 

だからではなくStudentクラスの外部キーSchoolIDを持つのを見ることができ、 実際のSchoolオブジェクトがEFマジックのおかげでマップされています。それはバーチャルにマークされているため、遅延ロードされています。

これは、EFを使用して、POCOモデル内のすべての外部キーIDを削除し、それらのオブジェクトへの実際の参照で置き換えることは安全であるということですか? IDの代わりにオブジェクトを直接参照することには欠点がありますか?

+0

これらPOCOSが十分に形成されていない、主キーは、[主キー]で装飾されている必要があり、したがって、エンティティ・フレームワークは、外部キーを決定するために、関連エンティティからその属性を使用します。最後に、いいえ、常にプライマリキーを持っている必要があります – Gusman

+0

@Gusman Thanks Gusman。うん、プライマリキーがあることは間違いないでしょう、それらはほんの単純な例でした。私の質問は、外来キー(ID)の必要性に関するものです。 –

+0

Student POCOでSchoolIdを作成する必要はありませんが、EFはDBにフィールドを作成して関係を作成します。生徒を学校から変更したい場合は、通信業者の学校を検索してその学校からアイテムを取り出し、それをもう一方の学校に追加するだけです。欠点はありません。 – Gusman

答えて

1

最終的には、外部キープロパティが必要になると思います。
生徒が学校を変更した場合、Associatedプロパティを更新するには、SchoolIdを知ることによってのみ行います。既存の学校に新しい学生を追加したい場合は

また、あなたは同じ文脈から学校をロードする必要があるでしょうか、他ますので、外部キープロパティを追加duplicate records

になってしまいますあまりに

public int SchoolId{ get; set; } 
+0

ええ、あなたは正しいです!私はエンティティを更新するためにそれらを必要とします。もし私のすべてのモデルが読み込み専用だとしたら?それは問題を引き起こすでしょうか? –

+0

私はそれが可能だと思いますが、その場合、異なるViewModels/Modelsを使用する方が良いと思います。 AutoMapperのようなツールを使用してデータエンティティを適切なViewModels/Modelsに変換することができます。それは実際にはあまり問題になりません。 –

+0

感謝の気持ちの人間:) –

関連する問題