使用MVC EF4.1,我试图将表(TableMaster)链接到TableChildOne(关系一对零或一)以及TableChildTwo(也是一对零或一)。 TableChildOne和TableChildTwo没有直接链接。
TablechildOne和TableChildTwo需要共享TableMaster的主键(我读过这个是不可能的,任何解决方法?)
我要包含一个图像以使其更清晰,不确定是否应该在某处添加外键,这不是代码创建的实际模型,而是我想要的。不确定某处是否应该有外键?
图片:http://www.davidsmit.za.net/img/untitled.png
下面的代码编译,但在尝试添加控制器时,我收到错误:
“已添加具有相同键的项目”
public class TableMaster
{
public int TableMasterID { get; set; }
public DateTime ReportDate { get; set; }
public virtual TableChildOne TableChildOne { get; set; }
public virtual TableChildTwo TableChildTwo { get; set; }
}
public class TableChildOne
{
[Key]
public int TableMasterID { get; set; }
public String Description_1 { get; set; }
public virtual TableMaster TableMaster { get; set; }
}
public class TableChildTwo
{
[Key]
public int TableMasterID { get; set; }
public String Description_2 { get; set; }
public virtual TableMaster TableMaster { get; set; }
}
public class Context : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TableMaster>()
.HasOptional(p => p.TableChildOne).WithRequired(p => p.TableMaster);
modelBuilder.Entity<TableMaster>()
.HasOptional(p => p.TableChildTwo).WithRequired(p => p.TableMaster);
}
当我完全删除第二个表格时,它可以正常工作。
我使用以下链接作为示例(表OfficeAssignment和Student),它显示了如何将表一对一或一对一地链接。但我添加另一个具有相同链接的表时遇到问题: http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-a-more-complex-data-model-for-an-asp-net-mvc-application
任何帮助将不胜感激。
由于 appelmeester
答案 0 :(得分:0)
你能否提供更多关于你为什么要这样做的背景?如果要跨三个表共享主键,则表示您正在对数据进行分区。您正在尝试解决哪些开发方案。听起来你可能想要映射对象继承,是吗?
如果你真的只有几个描述,那么这只是一个表。
修改强>
冷却。对于这个请求的业务环境有点模糊,我还是不太明白,抱歉。如果您有一个TableMaster,然后是一些子表,那么这听起来像一个继承树。因此,使用EF,您可以选择许多不同的策略来建模(TPH,TPT等)。为此,我建议调查TPT,因为这可能会让您获得清理数据的粒度。此外,默认情况下,您可以获得创建表的好处,就像您指定的那样。请查看this以供参考。