データベースとテーブルのことはしばらく忘れてください。classSpaceship
とclass があるとしPerson
ます。Contract
私がモデルを書いている場合、私はこれを行うかもしれません:
public class Spaceship {
public string LicensePlate { get; set; } //
public string Destination { get; set; } //Regular old data
public Person Captain { get; set; }
public Person Engineer { get; set; }
}
船長と機関士はどちらも人間であり、関連する情報は多少異なる場合がありますが、同じタイプであれば最も DRY なままです。
しかし、Entity Framework でこの種の関係を作成したい場合はどうすればよいでしょうか。エンティティ デザイナーで作成する場合、次のような関係を作成します。
--------------------- ---------------------
| Spaceship | | Person |
|---------------------| |---------------------|
| LicensePlate | | Name |
| Destination | | PhoneNumber |
|---------------------| |---------------------|
|Navigation Properties| |Navigation Properties|
| People |1---------------*| Spaceship |
--------------------- ---------------------
しかし、これは同じことではありません。この 2 つPeople
は正確には同じクラスを共有できますが、 との関係Spaceship
は根本的に異なります。私が言うことができるdbContextが欲しい
Spaceship Enterprise = new Spaceship();
Enterprise.Captain = People.Find("Kirk");
Enterprise.Engineer = People.Find("Scotty");
それは求めすぎですか?もちろん、他の方法もあります。「Captain」または「Engineer」という があり、それらすべてを にまとめることができPerson
ます。キャプテンに頻繁にアクセスする必要がある場合は、メソッドを作成することもできます.Role
Enterprise.People
GetCaptain()
Spaceship
しかし、教育の観点から、
- それは可能ですか?
- もしそうなら、実際のデータベース スキーマにどのような影響がありますか?
- 最善の方法は何ですか?