EF6 - BaseClass数据复制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF6 - BaseClass数据复制相关的知识,希望对你有一定的参考价值。
我有一个基类A
和派生类B
。 B
是我最近的迁移中介绍的。我正在寻找Table-per-Type
遗产。一个B
可以有许多A
s。我在尝试使用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
的B
实例a
添加到DB中。据我所知,调用new B(a)
创建了一个新的A
实例,它也被添加到因为唯一索引而失败的数据库中。
我该如何避免这种情况?
我想要引用数据,而不是重复。我想有可能使用Table-per-Hierarchy
方案但是会复制每个A
的B
数据(对吗?),我想避免,特别是因为A.SomeEntities
也会复制其条目。
刚刚出现在我脑海中的另一种可能性是将a
的Id传递给b
的构造函数,但那将需要调用DbContext
并且可能暗示我现在缺少的其他一些奇怪之处。
答案
看起来您正在尝试链接现有对象而不是类继承?
为什么不在b和a之间建立链接?
[Table("Bs")]
class B
{
public A referredA {get;set;}
public B(A a)
{
referredA=a;
}
}
以上是关于EF6 - BaseClass数据复制的主要内容,如果未能解决你的问题,请参考以下文章