首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF6 - BaseClass数据复制

EF6 - BaseClass数据复制
EN

Stack Overflow用户
提问于 2018-03-23 22:51:52
回答 1查看 37关注 0票数 0

我有一个基类A和派生类BB是在我最近的迁移中引入的。我打算继承Table-per-Type。对于一个B,可以有许多A。我在尝试update-database时遇到的错误与A.Designation上的索引有关,因为DB由Seed方法填充。我知道这个错误来自哪里,但我不知道如何避免它。

基类:

代码语言:javascript
复制
[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;
    }
}

派生类:

代码语言:javascript
复制
[Table("Bs")]
class B : A 
{
    public B(A a) : base(a.designation)
    {
         foreach (SomeType someType in A.SomeTypes)
         {
             // Do something
         }
    }
}

因此,在Seed方法中,首先是A的实例a,然后将基于aB实例b添加到DB中。据我所知,调用new B(a)会创建一个新的A实例,该实例还会添加到DB中,但由于惟一的索引而失败。

我怎么才能避免这种情况?

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

另一个突然出现在我脑海中的可能性是将a的Id传递给b的构造函数,但这将不得不调用DbContext,并可能意味着我现在缺少的其他奇怪之处。

EN

回答 1

Stack Overflow用户

发布于 2018-03-24 07:45:50

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

为什么不在你的b和a之间建立一个链接呢?

代码语言:javascript
复制
   [Table("Bs")]
    class B
    {
public A referredA {get;set;}
        public B(A a) 
        {
           referredA=a;
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49459316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档