【发布时间】:2011-06-07 05:39:24
【问题描述】:
我知道我们可以添加一个外部 XML 映射文件来动态更改数据上下文中的表名。但是根据我在大多数帖子上看到的内容,只有在表结构相同(相同的列和主键)的情况下才能做到这一点。
我想知道的是,当新表与上下文中的表不同时,有没有办法将新表动态添加到数据上下文中。
或者是否可以从实体框架中实现这一点?
【问题讨论】:
标签: c# linq-to-sql datacontext
我知道我们可以添加一个外部 XML 映射文件来动态更改数据上下文中的表名。但是根据我在大多数帖子上看到的内容,只有在表结构相同(相同的列和主键)的情况下才能做到这一点。
我想知道的是,当新表与上下文中的表不同时,有没有办法将新表动态添加到数据上下文中。
或者是否可以从实体框架中实现这一点?
【问题讨论】:
标签: c# linq-to-sql datacontext
我会直接说不,因为 ORM 不提供动态运行时模型,它是您查询的数据集的预构建静态模型。
然后,要使其动态化,您真正需要做的就是根据需要重新构建它。这将要求您在添加新表或列时调用构建,但这不是不可能的。这可以通过多种方式实现。
但是,如果这是您的问题,您不应该尝试使用像 linq-to-sql 这样的 ORM 来解决这个问题。它从来不是为此而建造的。我还推荐实体框架,因为它在各个方面都取代了 linq-to-sql(并且不再开发 linq-to-sql)。
【讨论】:
另一种方法是首先使用 EF 4.1 代码,您可以在其中动态生成和编译代码并将它们加载到您的应用程序域中。好吧,我认为您也可以对 EF 4.0 使用动态编译,但 Edmx 和映射很复杂。
这将是新的上下文,您将无法更改现有的上下文,但您可以合并到新的类库中。但这一切都必须在反射中发生,因为在编译时您将没有可用于 linq 的泛型类型。
【讨论】: