我的数据库中有一个实体,它有一个相应的"历史记录"实体。两个实体持有的数据基本相同; "历史" table用于跟踪此数据随时间的变化,主表仅包含最新数据。
我的C#代码中有些地方需要访问可能来自主实体实例或"历史记录"实体。例如,两个实体都有一个" SalesPrice"我希望能够使用适用于任一实体类型的属性编写单个语句。
C#"动态"关键字似乎应该启用此功能。例如,如果我们假设 MethodWithDynamicReturnType()被声明为返回动态,并且在运行时将返回主实体或历史实体的实例,那么我想成为能够编写这样的代码:
dynamic d;
d=MethodWithDynamicReturnType();
Console.WriteLine(d.SalesPrice.ToString());
但是我得到了一个异常("无法对空引用执行运行时绑定")。所以,我试图让运行时更加明确:
Main_Entity m;
History_Entity h;
MethodThatWillFillOneOutParameterOnly(out m, out h);
dynamic d;
if(h!=null){d=h;}else{d=m;}
Console.WriteLine(d.SalesPrice.ToString());
这并没有阻止异常。有趣的是,如果我投出变量" d"到" Main_Entity"或" History_Entity,"在适当的情况下,我的代码可以正常工作......但是并没有避免这会导致动态的整个观点?"
要么我完全被误解为动态,"或者,寻找其他解释,实体框架可能有过错吗?我注意到我分配到" d"的实际运行时间值。有一个奇怪的代理"类名,不我更喜欢看的实际实体类型名称。这表明存在某种间接性,即保持"动态"从达到预期目的?