EF代码第一次关系麻烦

时间:2013-08-30 16:00:34

标签: c# sql-server entity-framework

好的,这应该很简单,但我遇到了麻烦。我有两个类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; }
}

1 个答案:

答案 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始终位于该地区内,但未来该公司可能会决定远程为某个地区执行人力资源。在这个有限的例子中,适应不会太痛苦,但随着数据模型变得越来越复杂,当数据模型的结构需要改变时,它会变得更加痛苦。不要总是依赖结构来强制执行规则,而是考虑保持结构的灵活性并在进入时添加数据验证。