我有一个基类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
并且可能意味着一些我现在想念的其他奇怪之处。
答案 0 :(得分:0)
看起来您正在尝试链接现有对象而不是类继承?
为什么不在b和a之间建立链接?
[Table("Bs")]
class B
{
public A referredA {get;set;}
public B(A a)
{
referredA=a;
}
}