c# - 如何忽略继承中的歧视列
问题描述
我的系统有一个定制,他们使用相同的数据库,但定制有一些主系统不知道的自己的表。
我的主系统中有这个实体:
[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);
}
}
当我尝试在这种情况下运行查询时,我收到一个关于鉴别器列的运行时错误,但我不想使用类似层次结构,只需要组合来添加更多虚拟对象。有什么解决办法吗?
解决方案
如果有可能,您可以尝试为WORKFLOW_ITEM
and引入基类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; }
}
推荐阅读
- php - php 不断返回黑钻问号
- python - 如何在 Django 中使用 mysql 数据库数据到 FusionCharts
- javascript - 具有对象数组的深度展平嵌套数组
- android - 在用户触摸时关闭 FAB 子菜单
- sql-server - 如果我们需要 DAG 连接到 sql 服务器,要在气流环境的 docker 映像中添加什么?连接的代码是什么?
- python - 在 Colaboratory 中从 Google Drive 加载数据时遇到问题
- apache-flink - Apache flink - 早期触发窗口实现问题 - 收到重复的元素
- javascript - 每次呈现页面或视图时,Javascript 将数据保存到会话存储
- c# - 从数组脚本引用游戏对象时如何修复空引用?
- linux - win 10 上 Debian 子系统中的 VLC Pulse 音频错误