2010-10-21 198 views
1

我有一个返回相同的列一个表中的基本观点(给予或采取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

看起来像我找到了一个凉爽的解决方案,这个..

起初我试图实现接口的做法和遇到一些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")); } 
} 

好和容易..

+0

我猜你会调用这个鸭打字。我喜欢。我与你在一起,因为我最初的想法是用接口自杀。我更喜欢你的方法。 – 2012-01-10 23:15:57

2

你可以写(在模型或CommandText,而无需创建数据库对象)的存储过程可以简单的叫“选择*从视图“。然后create Function Import用于此过程并将返回类型设置为MyTableObject。