好的,这应该很简单,但我遇到了麻烦。我有两个类Region和Location。区域可以有许多位置,但位置只能位于一个区域。简单的东西。这就是我所拥有的:
Location Region
--------- -------
int LocationID int RegionID
string Name string Name
string BlahBlah List<Location> Locations
string OtherStuff
int RegionID
Region Region
现在我需要在一个地区添加一个家庭办公室。家庭办公室也是一个位置。实体框架似乎很困惑,所以我显然做错了。这就是我想要做的事情:
Location Region
--------- -------
int LocationID int RegionID
string Name string Name
string BlahBlah List<Location> Locations
string OtherStuff int HomeOfficeID
int RegionID Location HomeOffice
Region Region
我在这里缺少什么?
如果您不喜欢我上面写的内容,请参阅以下课程:
public class Region
{
public int RegionID { get; set; }
public string Name { get; set; }
public int HomeOfficeID { get; set; }
public virtual Location HomeOffice { get; set; }
public virtual List<Location> Locations { get; set; }
}
public class Location
{
public int LocationID { get; set; }
public string Name { get; set; }
public int RegionID { get; set; }
public virtual Region Region { get; set; }
}
答案 0 :(得分:1)
因此,如果“家庭办公室”确实没有任何其他位置的数据,那么就有一个解决方法:
Location Region
--------- -------
int LocationID int RegionID
string Name string Name
string BlahBlah List<Location> Locations
string OtherStuff
int RegionID
Region Region
bool IsHomeOffice
现在,Region获取了一个只读属性:
public Location HomeOffice
{
get { return Locations.FirstOrDefault(l => l.IsHomeOffice); }
}
您还需要一些验证码,以确保您不会最终为IsHomeOffice分配多个位置,但这将帮助您入门。
编辑:评论让我意识到这种方法不允许HomeOffice位于Region所在的区域之外。可能会发生这种情况吗?首先想到的可能性不大,但也许“HomeOffice”真正意味着一个地区的人力资源员工所在。目前,HomeOffice始终位于该地区内,但未来该公司可能会决定远程为某个地区执行人力资源。在这个有限的例子中,适应不会太痛苦,但随着数据模型变得越来越复杂,当数据模型的结构需要改变时,它会变得更加痛苦。不要总是依赖结构来强制执行规则,而是考虑保持结构的灵活性并在进入时添加数据验证。