【问题标题】:Multiple inheritence makes duplicated columns on database and conflict occurred多重继承使数据库上的列重复并发生冲突
【发布时间】:2019-04-23 20:50:50
【问题描述】:

我有两个类继承自同一个基类。以下是部分代码:

public abstract class baseclass
{
    public virtual int? MyObjectID { get; set; }
    public virtual Object MyObject { get; set; }
}
public class Derived1 :baseclass
{

}
public class Derived2 : baseclass
{

}

在为同一属性创建 3 列的数据库中: 我的对象 ID MyObject_ID MyObject_ID1

所以我无法向数据库发送值。它必须只有一列:MyObjectID 如何防止重复列?

【问题讨论】:

  • 上面的代码和数据库有什么关系?您可以完全控制在其中添加哪些列。
  • 另外,你有什么问题?
  • 这是 codefirst 项目,我使用 EF。我必须防止数据库中的重复列
  • 我怀疑这些列没有映射到同一个属性。我的猜测是“MyObjectID”映射到“MyObjectID”属性,“MyObject_ID”是导航属性“MyObject”的 FK(您没有指定要为此使用“MyObjectID”)和“MyObject_ID1 是鉴别器TPH 继承的列(虽然我不确定)。但是,请注意 Object MyObject 没有 int PK(除非它不是 System.Object),并且不能通过 EF 保存在没有 Key 的表中。

标签: c# entity-framework inheritance orm


【解决方案1】:

我用 Fluent Api 解决了这个问题:

modelBuilder.Entity<AnotherObject>().Ignore(o => o.Derived1);
modelBuilder.Entity<AnotherObject>().Ignore(o => o.Derived2);
modelBuilder.Entity<Object>().Ignore(o => o.AnotherObject);

现在我遇到了另一个问题。我需要从派生类中设置一个基类属性。

public abstract class BaseClass
{
    public virtual string MutualString { get; set; }
}
public class Derived1 :BaseClass
{
    public virtual Object1 Kisi { get; set; }
    public override string MutualString
    {
        get { return Kisi.TamAd; } //*TamAd is string.
        set { value = Kisi.TamAd; }
    }
}
public class Derived2 : BaseClass
{
    public virtual Object2 Firma{ get; set; }
    public override string MutualString
    {
        get { return Firma.TamAd; }
        set { value = Firma.TamAd; }
    }
}

我在尝试列出时出错。 "System.NullReferenceException: '对象引用未设置为对象的实例。'" 但它不是 null

【讨论】:

    猜你喜欢
    • 2012-11-14
    • 2015-04-27
    • 2011-07-29
    • 1970-01-01
    • 2021-10-30
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多