暂时忘记数据库和表格。假设我有一个 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; }
}
因为船长和工程师都是人,虽然他们的相关信息可能略有不同,但如果他们是同一类型,他们会保持最干燥。
但是如果我想在实体框架中建立这种关系呢?如果我在实体设计器中绘制它,我会建立这样的关系:
--------------------- ---------------------
| Spaceship | | Person |
|---------------------| |---------------------|
| LicensePlate | | Name |
| Destination | | PhoneNumber |
|---------------------| |---------------------|
|Navigation Properties| |Navigation Properties|
| People |1---------------*| Spaceship |
--------------------- ---------------------
但这不是一回事。因为虽然两者People
可以准确地共享同一个类,但它们之间的关系却有着Spaceship
根本的不同。我想要一个 dbContext 我可以说
Spaceship Enterprise = new Spaceship();
Enterprise.Captain = People.Find("Kirk");
Enterprise.Engineer = People.Find("Scotty");
那是过分的要求?我的意思是,当然,还有其他方法。Person
可能有一个Role
“船长”或“工程师”,然后你可以将它们全部归为Enterprise.People
. 如果您需要经常访问船长,您甚至可以制定一个GetCaptain()
方法。Spaceship
但是,为了教育,
- 那可能吗?
- 如果是这样,对实际数据库模式有什么影响?
- 最好的方法是什么?