我正在使用实体框架的v6.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; }
}
从类中可以推断,组织可以有多个位置,但是它只能有一个总部位置。< / p>
我正在使用Fluent API来配置这些类之间的关系。 “多个位置”方面很简单,可以使用以下内容:
HasMany(o => o.Locations)
.WithRequired(o => o.Organisation)
.HasForeignKey(l => l.OrganisationId);
但我似乎无法找到正确的语法来定义允许定义HQ位置的关系。如果我正在采取的方法存在缺陷,或者我只是错过了正确的语法?
更新
如果我将以下内容添加到组织配置:
HasOptional(o => o.HQLocation)
.WithMany()
.HasForeignKey(o => o.HQLocationId)
.WillCascadeOnDelete(true);
然后,Entity Framework不再出现错误,我的数据加载的形状也符合我的需要。
但是,对于多个组织,这允许位置为 HQ ;理想情况下我不希望这样。
答案 0 :(得分:1)
在一对一或一对一或一个关系Id
在两个实体上都应相同。这意味着Organisation.Id
必须与Location.Id
的{{1}}相同。当然,这不是好的设计选择。我建议将属性添加到HQLocation
以表明它是否为Location
:
HQLocation