我有一个基本视图,它返回与表相同的列(给或取1个字段)
在我的DAL代码中,我返回一个MyTableObject列表,但在某些情况下,我会调用视图来返回相同的数据,但来自不同的来源。
List<MyTableObject> tableObjects = new List<MyTableObject>();
if (case1)
tableObjects = entities.MyTableObjects.Where(criteria).ToList();
else
tableObjects = entities.MyViewObjects.Where(criteria).ToList(); // <-- This will obviously break
return tableObjects;
有没有办法将视图实体映射为表实体? (除了让表和视图实现相同的接口并返回该接口)我想将返回类型保留为MyTableObject。
我遇到了Auto Mapper,但不确定它是否适合这种情况..
答案 0 :(得分:3)
看起来我找到了一个很酷的解决方案..
最初我尝试实现接口方法并运行一些casting issues(使用我的谓词构建器旁边的接口),以及接口必须为实现接口的每个实体创建部分类。
答案.. POCOs 。
Iused Poco Template for EF,而不是简单地编辑xxxPocoGenerator.Context.tt从MyViews集合返回MyTable对象(一行)。
public ObjectSet<Trade> v_Trade {
get { return _v_Trade ?? (_v_Trade = CreateObjectSet<Trade>("Trades")); }
}
美好而轻松..
答案 1 :(得分:2)
您可以在模型中编写存储过程(或CommandText,而不创建数据库对象),只需调用“从视图中选择*”即可。然后create Function Import执行此过程并将返回类型设置为MyTableObject。