繁体   English   中英

EF6-BaseClass数据重复

[英]EF6 - BaseClass data duplication

我有一个基类A和派生类B 我最近的迁移中介绍了B 我要进行Table-per-Type继承。 一个A可以有多个B 我尝试update-database时遇到的错误与A.Designation上的索引有关,因为update-database是由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方法第一实例aA ,然后一个实例bB基于a被添加到DB。 据我了解,调用new B(a)会创建一个新的A实例,该实例也会添加到数据库中,由于唯一索引而失败。

如何避免这种情况?

我希望引用数据,而不是重复数据。 我想可以使用A.SomeEntities Table-per-Hierarchy方案,但这将为每个B复制A的数据(对吗?),我想避免这种情况,特别是因为A.SomeEntities也会复制其条目。

我突然想到的另一种可能性是将a的Id传递给b的构造函数,但是那将不得不调用DbContext并且可能暗示我现在缺少其他怪异的东西。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM