如何基于类型转换基类

时间:2016-02-20 08:03:25

标签: c# entity-framework oop inheritance

有人请建议如何进行以下方案。

我有一个案例类名BaseData和Derived类名为DerivedData

DerivedData objderived= (baseobject.getType())baseobject;

现在我想将BaseData转换为DerivedData,如下所示。

注意:(baseobject.getType())语法无效。

if (baseobject is DerivedData1)
{
  db.Set<DerivedData1>().Add((DerivedData1)data);
}
else if (data is DerivedData2)
{
  db.Set<DerivedData2>().Add((DerivedData2)data);
}
else if (data is DerivedData3)
{
  db.Set<DerivedData3>().Add((DerivedData3)data);
}

已编辑:我正在尝试删除if条件,因为BaseData获得了多个DerivedData。

{{1}}

2 个答案:

答案 0 :(得分:2)

根据您的编辑,并假设:

  • dbDbContext;
  • BaseData层次结构仅存在于代码级别(因此,从BaseData派生的类型不在EF模型中的TPH,TPT或TPCT层次结构中);

只需使用non-generic API

var baseobject = // create BaseData descendant somehow;
db.Set(baseobject.GetType()).Add(baseobject);

答案 1 :(得分:0)

如果您可以直接参考BaseData,那么您是否也可以到达DrivedData

Type classtype = Assembly.GetAssembly(typeof(DerivedData)).GetType("DerivedData");
DerivedData dreivedobject =  Activator.CreateInstance(classtype) as DerivedData;