【问题标题】:How to add a table to the EF4 Context dynamically in code - No Code First如何在代码中动态地将表添加到 EF4 上下文 - 无代码优先
【发布时间】:2011-02-18 17:00:20
【问题描述】:

我们每 6 个月生成一系列报告,并将结果存储到表格中,以便日后随时查询/查看。根据循环,将添加两个或四个表。它们具有 yyyy_mmm_Table_x 的标准命名约定。

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

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

我可以简单地通过查询 sysobjects 来获得可用表的列表。如果我可以在站点启动时获取此列表并将表添加到上下文中,那么我可以使用动态 LINQ 库之类的东西来查询它们,具体取决于用户从下拉列表中选择的表。

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

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

所以,如果您有任何建议或建议,我很乐意听取他们的意见。

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多