C# 查询父类EF继承linq查询
大家好,下面是我的基本EF类结构:C# 查询父类EF继承linq查询,c#,sql,entity-framework,linq,inheritance,C#,Sql,Entity Framework,Linq,Inheritance,大家好,下面是我的基本EF类结构: public abstract class StandardEngineeredModel { [Key] public string ModelNumber { get; set; } public int VoltageInput { get; set; } } public class DualRatedInputEngineeredModel : StandardEngineeredModel { public int
public abstract class StandardEngineeredModel
{
[Key]
public string ModelNumber { get; set; }
public int VoltageInput { get; set; }
}
public class DualRatedInputEngineeredModel : StandardEngineeredModel
{
public int SinglePhaseVoltageInput { get; set; }
public string SinglePhaseHzInput { get; set; }
public decimal SinglePhaseAmpsInput { get; set; }
public bool SeparateInput { get; set; }
}
以及我的背景:
public class LabelPrintingContext : DbContext
{
public virtual DbSet<StandardEngineeredModel> StandardEngineeredModels { get; set; }
}
但是当执行此操作时,它会显示无效的列名SeparateInput,这似乎是因为从它继承的DualRatedInputEngineeredModel将额外的列添加到了我的StandardEngineeredModels表中。我不知道该怎么做,我不想返回Iqueryable,但不管我怎么做,它都告诉我SeparateInput是无效的列名
我还尝试先将其转换,但得到了相同的错误:
public StandardEngineeredModel GetEngineeredOrder(string modelNumber)
{
using (context = new LabelPrintingContext())
{
return (from s in context.StandardEngineeredModels.OfType<StandardEngineeredModel>()
where s.ModelNumber == modelNumber
select s).FirstOrDefault();
}
}
公共标准EngineeredModel GetEngineeredOrder(字符串型号)
{
使用(context=newLabelPrintingContext())
{
返回(来自context.StandardEngineeredModels.OfType()中的)
其中s.ModelNumber==ModelNumber
选择s).FirstOrDefault();
}
}
我需要做DTO什么的吗?我这样做完全错了吗
提前感谢您的任何意见/帮助 根据显示的代码,我看不到每个引用的
DualRatedInputEngineeredModel
,因此我看不出该错误是如何在该代码中发生的。这就是为什么我对出现这个错误感到困惑的原因。您是在为您的模式使用每个层次表还是每个具体表?TPH更容易映射到访问基本类型的数据库集,尽管使用TPC应该是可能的。听起来您可能需要TPC,其中DualRatedInputEngineeredModel有一个基表和一个单独的表,但是EF认为这将是TPH,所有子类都存储在一个带有鉴别器的表中。因为EF创建表的方式不同,输入在standardengineeredmodel表中,并且有一个鉴别器来确定我使用的模型。我使用TPH,没有办法只从表中提取基类属性吗?我更喜欢使用TPH,但如果它不能满足我的需要,我可以切换。
public StandardEngineeredModel GetEngineeredOrder(string modelNumber)
{
using (context = new LabelPrintingContext())
{
return (from s in context.StandardEngineeredModels.OfType<StandardEngineeredModel>()
where s.ModelNumber == modelNumber
select s).FirstOrDefault();
}
}