实体框架,将视图映射到表

时间:2010-10-21 22:48:06

标签: linq entity-framework mapping

我有一个基本视图,它返回与表相同的列(给或取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,但不确定它是否适合这种情况..

2 个答案:

答案 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。