对两个相同的表使用相同的实体类?

时间:2010-10-18 16:33:41

标签: c# entity-framework

我有一个基于我的实体框架中的表动态生成的Web服务器控件。现在决定使用具有不同数据集的相同结构的表,我需要一些方法来动态地将我的控件重新指向另一个表。 (我已经考虑过保留一张桌子而只是添加一个标志,所以不要让我们离开那里)

我可以使用linq-to-entities,通过将新表添加到我的实体模型,并且只是有条件地查询模型中的一个或另一个表来实现。问题是查询返回的结果将是两个不同实体类的集合。这会对处理这些集合的所有代码造成问题,因为它必须进行修改并可能重复以使其工作。

因此,如果我可以以某种方式映射linq查询的结果,这样无论我查询哪个表,结果都是相同的类类型,那么它将最小化对其余代码的影响。我将如何实现类似下面的内容,其中两个不同的表可以实现为相同类类型的列表?

请注意,我使用的是.NET 3.5

var formFooQuery;
if(mode1 == true)
{
        formFooQuery = from r in EntitiesContext.Foo1Set.Include("Foo1Data")
                                where r.FooId == fooId
                                select r;
}
else
{
        formFooQuery = from r in EntitiesContext.Foo2Set.Include("Foo2Data")
                                where r.FooId == fooId
                                select r;
}
List<Foo> foos = formFooQuery.ToList<Foo>();

2 个答案:

答案 0 :(得分:1)

您可以使用POCO Support

在Entity Framework中执行此操作

答案 1 :(得分:1)

if(mode1 == true)    
{    
        formFooQuery = from r in EntitiesContext.Foo1Set.Include("Foo1Data")    
                                where r.FooId == fooId    
                                select new FooViewModel { FooId = r.FooId, FooName = r.FooName };    
}    
else    
{    
        formFooQuery = from r in EntitiesContext.Foo2Set.Include("Foo2Data")    
                                where r.FooId == fooId    
                                select new FooViewModel { FooId = r.FooId, FooName = r.FooName };    
}    
List<FooViewModel> foos = formFooQuery.ToList<FooViewModel>();