EF6 - BaseClass数据重复

时间:2018-03-23 22:51:52

标签: c# entity-framework-6

我有一个基类A和派生类B。我最近的迁移中引入了B。我要继承Table-per-Type。一个B可以有多个A个。我在尝试update-database时遇到的错误与A.Designation上的索引相关,因为数据库会被Seed方法填充。我了解此错误的来源,但我不知道如何避免错误。

基类:

[Table("As")]
class A
{
    [Key]
    public Id { get; set; }

    [Index(IsUnique = true)]
    public string Designation { get; set; }

    // This is mapped via EF and required by Bs constructor
    public ICollection<SomeType> SomeType { get; set; }

    // Parameter less constructor for EntityFramework
    private A() { }

    public A(string designation)
    {
        Designation = designation;
    }
}

派生类:

[Table("Bs")]
class B : A 
{
    public B(A a) : base(a.designation)
    {
         foreach (SomeType someType in A.SomeTypes)
         {
             // Do something
         }
    }
}

因此,在Seed方法首先a A的实例中,添加了基于b的{​​{1}}实例B到DB。 据我了解,调用a会创建一个new B(a)的新实例,该实例也会添加到因为唯一索引而失败的数据库中。

我该如何避免这种情况?

我想要引用数据,而不是重复数据。我想可以使用A方案,但这会复制每个Table-per-Hierarchy {(1}}的数据,(对吗?)我想避免,特别是因为{{ 1}}也会复制其条目。

刚出现在我脑海中的另一种可能性是将A的ID传递给B的构造函数,但那必须调用A.SomeEntities并且可能意味着一些我现在想念的其他奇怪之处。

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试链接现有对象而不是类继承?

为什么不在b和a之间建立链接?

   [Table("Bs")]
    class B
    {
public A referredA {get;set;}
        public B(A a) 
        {
           referredA=a;
        }
    }