如何在代码中动态添加表格到EF4上下文中
我们每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。 但有时旧的方式更简单。
所以,如果您有任何建议或意见,我很乐意听到他们。
谢谢!
即使使用普通的EF,您仍然需要每个表的新数据类型,因为当您映射表时,需要使用新实体类型的新ObjectSet
才能运行查询。 据我所知,即使表结构完全相同,也不可能将两个表映射到同一个实体。
所有运行时映射都存储在由EntityConnection
准备的MetadataWorkspace
。 所以如果你想玩它,你可以从那里开始,但这些类的公共接口看起来并不乐观。
我想你想在这些表上运行Linq-to-entities,所以使用Stored Procedure根据数据参数从正确的表返回数据可能不是一个选项。
您应该使用常见的ADO.NET。
链接地址: http://www.djcxy.com/p/15973.html上一篇: How to add a table to the EF4 Context dynamically in code