0

使用 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-应用程序

任何帮助将不胜感激。

谢谢appelmeester

4

1 回答 1

0

你能提供更多关于你为什么要这样做的背景吗?如果您在三个表之间共享主键,则您正在对数据进行分区。您要解决的开发方案是什么。听起来您可能想要映射对象继承,对吗?

如果您真的只有几个描述,那么这实际上只是一张表。

编辑:

凉爽的。因为这个请求的业务上下文有点模糊,我还是不太明白,不好意思。如果您有一个 TableMaster,然后是一些子表,那么这听起来像一个继承树。因此,使用 EF,您可以选择许多不同的策略来对此进行建模(TPH、TPT 等)。为此,我建议研究 TPT,因为这可能使您能够获得有关如何清理数据的粒度。此外,您还可以获得默认情况下将创建表的好处,就像您指定的那样。看看这个以供参考。

于 2012-02-02T17:47:37.050 回答