我有一个基类A和派生类B。B是在我最近的迁移中引入的。我打算继承Table-per-Type。对于一个B,可以有许多A。我在尝试update-database时遇到的错误与A.Designation上的索引有关,因为DB由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,然后将基于a的B实例b添加到DB中。据我所知,调用new B(a)会创建一个新的A实例,该实例还会添加到DB中,但由于惟一的索引而失败。
我怎么才能避免这种情况?
我希望数据被引用,而不是复制。我想使用Table-per-Hierarchy方案是可能的,但这会重复每个B的A数据(对吗?)这是我想避免的,特别是因为A.SomeEntities的条目也会被复制。
另一个突然出现在我脑海中的可能性是将a的Id传递给b的构造函数,但这将不得不调用DbContext,并可能意味着我现在缺少的其他奇怪之处。
发布于 2018-03-24 07:45:50
看起来您正在尝试与现有对象链接,而不是类继承吗?
为什么不在你的b和a之间建立一个链接呢?
[Table("Bs")]
class B
{
public A referredA {get;set;}
public B(A a)
{
referredA=a;
}
}https://stackoverflow.com/questions/49459316
复制相似问题