【发布时间】:2019-05-29 01:39:02
【问题描述】:
我创建了这样一种Table per Concrete Type (TPC)结构如下图:
以下是这里使用的实体:
public abstract class BaseModel : MyOtherBaseClass
{
[Key]
public int Id { get; set; }
//Foreign key for Project
public int ProjectId { get; set; }
public int Sequence { get; set; }
public string Name { get; set; }
public string IconUrl { get; set; }
//Navigation Properties ####################
public virtual Project Project { get; set; }
}
[Table("Tool")]
public class Tool : BaseModel
{
[Key]
public int Id { get; set; }
public string ToolBrand { get; set; }
//Navigation Properties ####################
//public virtual Project Project { get; set; }
}
[Table("Priority")]
public class Priority : BaseModel
{
[Key]
public int Id { get; set; }
public string PriorityCode { get; set; }
//Navigation Properties ####################
//public virtual Project Project { get; set; }
}
此时我对以下问题感到困惑:
1) 我可以将 ID 用于工具和优先级实体吗?而且这绝对没有必要吗?
2) 我在 BaseModel 类中使用 FK (ProjectId) 和相关表 Project。但是,由于 ProjectId 列将在 Tool 和 Priority 表中创建,如何创建关系?会不会有什么问题?
3) 如果我不喜欢 Fluent API,我应该在上下文中除了 BaseModel 实体添加 Tool 和 Priority 实体吗?因为在某些资源中添加了子类,而在其他一些资源中则没有。哪一个是真的?
public class EntityContext : DbContext
{
public DbSet<BaseModel> BaseModel { get; set; }
// ? public DbSet<Tool> Tool { get; set; }
// ? public DbSet<Priority> Priority { get; set; }
}
如果对这种用法有任何问题,您也可以告诉我吗?谢谢...
【问题讨论】:
-
如果 db 中的 Tool 和 Priority 表没有 BaseModel 的列,这个 TPC 会怎样?
-
@VidmantasBlazevicius 对不起,我不明白你的意思?和1-2-3点有关系吗?
-
对不起,我可能误会了你。我认为该图是 db 架构,它可能只是一个类图。
标签: c# asp.net asp.net-mvc entity-framework ef-code-first