1
我正在创建一个代码优先的数据库与6.0的实体框架。我有一个组织类,并在C#中定义的相关位置类,如下所示:实体框架代码优先,一对零对一和一对多关系到同一个实体
public class Organisation
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Location> Locations { get; set; }
public int? HQLocationId { get; set; }
public Location HQLocation { get; set; }
}
public class Location
{
public int Id { get; set; }
public string Name { get; set; }
public int OrganisationId { get; set; }
public Organisation Organisation { get; set; }
}
由于可以从类中推断出,一个组织可以有多个位置,但它只能有一个总部位置。
我正在使用Fluent API来配置这些类之间的关系。 “多地点”方面是很简单的,用了以下工作:
HasMany(o => o.Locations)
.WithRequired(o => o.Organisation)
.HasForeignKey(l => l.OrganisationId);
我却无法似乎找到了正确的语法定义允许定义HQ位置的关系。如果我采取的方法存在缺陷,或者我只是错过了正确的语法?
UPDATE
如果我添加以下到组织配置:
HasOptional(o => o.HQLocation)
.WithMany()
.HasForeignKey(o => o.HQLocationId)
.WillCascadeOnDelete(true);
然后实体框架不再错误,并在适合我的需要的形状我的数据负载。
然而,这允许位置要超过一组织的HQ;理想情况下我不想要。
这个解决方案是什么,我会考虑,如果没有其他的选项存在。但是,它允许将任意数量的位置标记为总部。我的设计要求仅适用于每个组织的一个总部。因此,这是提出一个不同的设计,而不是回答这个问题。这就是说......这不是我的倒票;我很欣赏你的建议。 –