有人请建议如何进行以下方案。
我有一个案例类名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}}
答案 0 :(得分:2)
根据您的编辑,并假设:
db
是DbContext
; 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;