如何在代码中动态地向EF4上下文添加表 - 无代码优先

时间:2011-02-18 06:47:11

标签: entity-framework-4 linq-to-entities ef4-code-only

我们每6个月运行一系列报告,并将结果存储到可以在将来随时查询/查看的表格中。根据周期,将添加两个或四个表。它们具有yyyy_mmm_Table_x的标准命名约定。

我们的网站使用ASP.Net MVC2构建,数据库使用标准模型设计师而不是Code First使用EF4建模。

我希望能够在运行时将报表表动态添加到EF4上下文中。我不想使用设计器手动将它们添加到模型中,否则我们必须更新每个报告周期并重新编译模型,因为我们添加了额外的报告。如果没有其他任何改变,这将是一个维护问题。

我只需查询sysobjects即可获得可用表的列表。如果我可以获取此列表并在站点启动时将表添加到上下文中,那么我可以使用类似Dynamic LINQ库的内容来查询它们,具体取决于用户从下拉列表中选择的表。

我不能使用EF4的Code First开箱即用,因为这会迫使我为表创建具体的类,这只会是同样的维护问题。我怀疑我可以使用Code First框架用来动态更新上下文的相同策略,但我根本没有看过这个库,我希望熟悉它的人可以指出我正确的方向。

否则我想我必须回到ADO.Net来处理这个领域。这可能是最好和最简单的方式,所以我想我正在寻找评论。我不是狂热者所以我不需要LINQ和EF4中的所有东西。 :)但它似乎有点干净和一致,特别是如果它允许我使用动态LINQ。但有时旧的方式更简单。

所以,如果您有任何建议或意见,我很乐意听到。

谢谢!

1 个答案:

答案 0 :(得分:0)

即使使用通用EF,您仍然需要每个表的新数据类型,因为在映射表时,您需要新的ObjectSet新实体类型才能运行查询。据我所知,即使表结构完全相同,也不可能将两个表映射到同一个实体。

所有运行时映射都存储在由MetadataWorkspace准备的EntityConnection中。所以,如果你想玩它,你可以从那里开始,但这些类的公共接口看起来并不乐观。

我想你想在这些表上运行Linq-to-entities,所以使用存储过程根据数据参数从正确的表返回数据可能不是一个选项。

您应该使用通用的ADO.NET。