我正在学习EF6并且认为我已经知道了很多,但是还没有为此找到一个好的解决方案:
假设我有以下模型类:
class LivingRoom {
public int Id { get; set; }
public string Name { get; set; }
public PersonTypeId { get; set; }
public IList<Person> Persons { get; set; }
}
class Person {
public int Id { get; set; }
public int PersonTypeId { get; set; }
public string Name { get; set; }
}
使用这些模型类,我可以通过DbContext保存和加载,没有任何问题。感谢&#34; parent&#34;中的导航属性。 LivingRoom类,Persons集合将包含在此过程中。我不必单独加载/保存它们。
更新:忘记逻辑PersonTypeId字段,该字段将用于确定哪些人员应该在集合属性中。
到目前为止一切顺利。
但是EF6在Persons表中创建了一个FK,指向LivingRooms表,这似乎是合乎逻辑的。
但是,如果我要将Persons表用于更多其他父实体,例如。 &#34;总线&#34;和&#34; Plane&#34;,因此不想在Persons表中有依赖(= LivingRooms表中的FK字段)?
我是否可以在不破坏&#34;包含子列表的情况下实现此目的(不创建FK字段)&#34;加载/保存过程如上所述?
如果是,怎么样?如果不是,为什么不呢?
注意:请理解我想学习最好的技巧。如此好的建议,不这样做,也是受欢迎的。
答案 0 :(得分:0)
首先,最好在FK
表格中处理Person
表格自己做这个网站有这个:
class LivingRoom
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Person> Persons { get; set; }
}
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public LivingRoom LivingRoom { get; set; }
public int LivingRoomId { get; set; }
}
现在如果你有其他实体,如Bus
和......那么我们有
public class Bus
{
public int Id { get; set; }
public ICollection<Person> People { get; set; }
}
和更新的Person类是:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public LivingRoom LivingRoom { get; set; }
public int LivingRoomId { get; set; }
public Bus Bus{ get; set; }
public int BusId { get; set; }
}
您可以将人员表中的FK
设置为Nullable
来执行此操作:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public LivingRoom LivingRoom { get; set; }
public int? LivingRoomId { get; set; }
public Bus Bus{ get; set; }
public int? BusId { get; set; }
}
如您所见,我们将BusId
和LivingRoomId
设为nullable
,或者您可以设置其中一个
注意:您需要添加一些映射器来告诉EF哪个字段ID FK
以及类似的东西,......