【发布时间】:2018-07-18 15:21:18
【问题描述】:
我首先使用带有代码的 Entity Framework 6。
理想的场景是用户创建一个 PrintType(例如“Business Card”),然后他为此 PrintType 创建多个布局(例如“Center”、“Left”),最后他创建了一个名为“Business Card with花卉”。一旦他创建了这个模板,程序应该为这个模板创建一个默认布局。
所以应该有一个可选的 FK,只有当它是模板的默认布局时才设置。
希望你能关注我。
当我想使用下面的代码创建迁移时,我收到以下错误:
无法确定之间关联的主体端 类型 'xxx.Entities.Template' 和 'xxx.Entity.Layout'。这个的主要目的 关联必须使用任一显式配置 关系流式 API 或数据注释。
public class PrintType
{
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<Template> Templates { get; set; }
public virtual ICollection<Layout> Layouts { get; set; }
}
public class Layout
{
public int Id { get; set; }
public string Title { get; set; }
[Required]
public virtual PrintType PrintType { get; set; }
public Template Template { get; set; }
}
public class Template
{
public int Id { get; set; }
public string Title { get; set; }
[Required]
public virtual PrintType PrintType { get; set; }
[Required]
public Layout Layout { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Layout>().HasOptional(a => a.Template).WithOptionalDependent().WillCascadeOnDelete(false);
}
【问题讨论】:
-
您只能使用 Fluent API 映射为布局类型创建动态 FK。
-
关系的哪一边应该包含外键?更一般地说,我认为你应该退后一步,重新评估你的要求。我情不自禁——你的关系模型在我看来是错误的(只是一种感觉)
-
你能更详细地解释一下布局的作用吗?布局可以独立于模板存在吗?多个模板可以具有相同的布局吗?什么是“默认”布局?它真的是一个后备,还是更像是一个初始布局,当用户开始配置更多细节时会改变?
标签: c# entity-framework entity-framework-6