C# 无法在实体类型参数\手动\输入\模式上设置字段/属性存储。有关详细信息,请参见InnerException

C# 无法在实体类型参数\手动\输入\模式上设置字段/属性存储。有关详细信息,请参见InnerException,c#,entity-framework,inheritance,tph,C#,Entity Framework,Inheritance,Tph,我在尝试向数据库中添加新的“parameter”对象时遇到此错误,我有: “参数”抽象类 “参数\手动\输入\模式”类继承“参数”抽象类 “参数存储模式”类继承“参数”抽象类 “商店”类 请注意,该类只继承与模式相关的属性 [表(“参数”)] 公共抽象类参数 { [关键] 公共字符串参数_Id{get;set;} 公共字符串模式{get;set;} 公共虚拟字符串x{get;set;} 公共虚拟字符串y{get;set;} [外键(“存储”)] 公共虚拟字符串存储\u Id{get;set

我在尝试向数据库中添加新的“parameter”对象时遇到此错误,我有:

  • “参数”抽象类
  • “参数\手动\输入\模式”类继承“参数”抽象类
  • “参数存储模式”类继承“参数”抽象类
  • “商店”类
请注意,该类只继承与模式相关的属性

[表(“参数”)]
公共抽象类参数
{
[关键]
公共字符串参数_Id{get;set;}
公共字符串模式{get;set;}
公共虚拟字符串x{get;set;}
公共虚拟字符串y{get;set;}
[外键(“存储”)]
公共虚拟字符串存储\u Id{get;set;}
公共虚拟存储{get;set;}
}
公共类参数\u手动\u输入\u模式
{
公共重写字符串x{get;set;}
}
公共类参数\u存储\u模式
{
公共重写字符串y{get;set;}
[外键(“存储”)]
公共重写字符串存储\u Id{get;set;}
公共重写存储{get;set;}
}
//DbContext
公共类MyContext:DbContext
{
public MyContext():base()
{ }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Map(m=>m.Requires(“模式”).HasValue(“存储”))
.Map(m=>m.Requires(“模式”).HasValue(“手动”);
}

}
为什么基类中有所有这些
virtual
属性,而派生类中有
override
s属性?将它们从基类中删除,只在适当的派生类中定义它们。当我想实例化一个派生类类型的对象时,我就是这样定义的:Parameter param=new Parameter_store_pattern();param.X=“测试”;如果我不在基类中定义属性“x”,如何在派生类中访问它?关键是你不应该这样做。尽管TPH将把所有字段合并到一个表中,但您仍然必须在适当的类中定义它们。例如,您应该在
参数\u manuel\u input\u pattern
类-
公共字符串x{get;set;}
中定义属性
x
(从基类中删除它之后)。如果我删除属性“x”从基类定义为派生类,然后实例化一个对象为:baseClass param=new derivedClass(),我无法访问派生类的属性,这是一个问题