[英]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
方法第一实例a
的A
,然后一个实例b
的B
基于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.