【发布时间】:2016-08-31 10:59:42
【问题描述】:
我正在使用实体框架 v6.0 创建代码优先数据库。我在 c# 中定义了一个 Organisation 类和一个相关的 Location 类,如下所示:
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);
但是,我似乎找不到正确的语法来定义允许定义总部位置的关系。如果我采用的方法存在缺陷,或者我只是缺少正确的语法?
更新
如果我将以下内容添加到 Organisation 配置中:
HasOptional(o => o.HQLocation)
.WithMany()
.HasForeignKey(o => o.HQLocationId)
.WillCascadeOnDelete(true);
然后 Entity Framework 不再出错,我的数据以适合我需要的形状加载。
但是,这允许一个位置成为多个组织的总部;理想情况下,我不希望这样。
【问题讨论】:
-
你最后解决了吗?
-
不,我添加到原始帖子中的“更新”是我在时间用完时留下的妥协。
标签: c# entity-framework ef-code-first entity-framework-6 code-first