我的系统有一个定制,它们使用相同的数据库,但定制有一些主系统不知道的自己的表。
我的主系统中有这个实体:
[Table("WORKFLOW_ITEM")]
public class WORKFLOW_ITEM
{
public WORKFLOW_ITEM()
{
PROJECT = new HashSet<PROJECT>();
WORKFLOW_HISTORY = new HashSet<WORKFLOW_HISTORY>();
}
[Key]
public long ID_WORKFLOW_ITEM { get; set; }
public long ID_WORKFLOW { get; set; }
public virtual WORKFLOW WORKFLOW { get; set; }
public virtual ICollection<WORKFLOW_HISTORY> WORKFLOW_HISTORY { get; set; }
public virtual ICollection<PROJECT> PROJECT { get; set; }
}在我的自定义系统中,我需要扩展以实现这个新的集合
[Table("WORKFLOW_ITEM")]
public class WORKFLOW_ITEMCUSTOM : WORKFLOW_ITEM
{
public WORKFLOW_ITEMCUSTOM()
{
ENGINEERING_REQUEST = new HashSet<ENGINEERING_REQUEST>();
}
public virtual ICollection<ENGINEERING_REQUEST> ENGINEERING_REQUEST { get; set; }
}和
public class ENGINEERING_REQUEST
{
[Key]
public long ID_ENGINEERING_REQUEST { get; set; }
public long? ID_WORKFLOW_ITEM { get; set; }
public virtual WORKFLOW_ITEMCUSTOM WORKFLOW_ITEM { get; set; }
}我的上下文
public class ContextCUSTOM: MyContext
{
public ContextCUSTOM(string p_ConnectionString) :
base(p_ConnectionString) { }
public virtual DbSet<ENGINEERING_REQUEST> ENGINEERING_REQUEST { get; set; }
public virtual DbSet<WORKFLOW_ITEMCUSTOM> WORKFLOW_ITEMCUSTOM{ get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ENGINEERING_REQUEST>()
.HasOne(ct => ct.WORKFLOW_ITEM)
.WithMany(ct => ct.ENGINEERING_REQUEST)
.HasForeignKey(ct => ct.ID_WORKFLOW_ITEM)
.OnDelete(DeleteBehavior.Restrict);
}
}当我试图在这个上下文中运行一个查询时,我收到了一个关于判别器列的运行时错误,但是我不想使用like层次结构,只使用组合来添加更多的虚拟对象。有什么解决方案吗?
发布于 2020-06-04 05:04:27
如果可能,您可以尝试为WORKFLOW_ITEM和WORKFLOW_ITEMCUSTOM引入基类
public abstract class WORKFLOW_ITEM_BASE
{
public WORKFLOW_ITEM_BASE()
{
PROJECT = new HashSet<PROJECT>();
WORKFLOW_HISTORY = new HashSet<WORKFLOW_HISTORY>();
}
[Key]
public long ID_WORKFLOW_ITEM { get; set; }
public long ID_WORKFLOW { get; set; }
public virtual WORKFLOW WORKFLOW { get; set; }
public virtual ICollection<WORKFLOW_HISTORY> WORKFLOW_HISTORY { get; set; }
public virtual ICollection<PROJECT> PROJECT { get; set; }
}
[Table("WORKFLOW_ITEM")]
public class WORKFLOW_ITEM: WORKFLOW_ITEM_BASE {}
[Table("WORKFLOW_ITEM")]
public class WORKFLOW_ITEMCUSTOM : WORKFLOW_ITEM_BASE
{
public WORKFLOW_ITEMCUSTOM()
{
ENGINEERING_REQUEST = new HashSet<ENGINEERING_REQUEST>();
}
public virtual ICollection<ENGINEERING_REQUEST> ENGINEERING_REQUEST { get; set; }
}https://stackoverflow.com/questions/62182415
复制相似问题