【发布时间】:2016-07-05 22:02:57
【问题描述】:
我有一个父类ComponentDesign:
public class ComponentDesign
{
public string Name { get; set; }
public virtual JobFile DesignFile { get; set; }
public int? DesignFileId { get; set; }
public Pdf PdfFile { get; set; }
public int? PdfFileId { get; set; }
public JobFile SealedPdfFile { get; set; }
public int? SealedPdfFileId { get; set; }
public int Id { get; set; }
public int JobId { get; set; }
}
还有一个子类JobFile(其中Pdf是一个子类):
public class JobFile
{
public int ID { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public ComponentDesign ComponentDesign { get; set; }
public int? ComponentDesignId { get; set; }
public int? JobId { get; set; }
}
这些类使用实体框架存储在关系数据库中。我想在关系的两边都有导航属性,这样我就可以随意说componentDesign.PdfFile或jobFile.ComponentDesign。
ComponentDesign 中JobFile 类型的每个属性都是可选的,JobFile will only ever belong to oneComponentDesign. However, aJobFilemay be free-standing, not belonging to anyComponentDesign(sojobFile.ComponentDesign 将为空)。
我正在努力解决如何使用 Fluent API 来配置这种关系。这是一对一的。是否可以在关系的双方都有导航属性?请记住,JobFile 可以是独立的(所以jobFile.ComponentDesign 并不总是相关的),所以有属于ComponentDesigns 的JobFiles 和不属于的JobFiles。最接近我的感觉是:
modelBuilder.Entity<ComponentDesign>()
.HasOptional(componentDesign => componentDesign.DesignFile)
.WithRequired(jobFile => jobFile.ComponentDesign);
但这似乎表明jobFile.ComponentDesign 始终是必需的,但事实并非如此。我很犹豫是否尝试它,因为它会产生一些实质性的迁移,所以我想先获得输入。在这种情况下,我的 Fluent API 配置应该是什么样的?
【问题讨论】:
-
要在实体框架中创建两个对象类之间的关系,或者说数据表,您可以使用带有类类型的虚拟词。我相信您可以找到针对您的问题的虚拟属性的结果。
标签: c# entity-framework entity-framework-6 one-to-one