C# 向datacontext或EDM动态添加新表

C# 向datacontext或EDM动态添加新表,c#,linq-to-sql,datacontext,C#,Linq To Sql,Datacontext,我知道我们可以添加一个外部XML映射文件来动态更改数据上下文中的表名。但根据我在大多数文章中看到的情况,只有在表结构相同(相同的列和主键)的情况下才能做到这一点 我想知道的是,当新表与当前上下文中的表不同时,是否有一种方法可以动态地将其添加到数据上下文中 或者可以从实体框架中实现这一点吗?我会直截了当地说不,因为ORM不提供动态运行时模型,它是您查询的数据集的预构建静态模型 然后,要使其动态化,您真正需要做的就是根据需要重新构建它。这将要求您在添加新表或列时调用构建,但这不是不可能的。这可以通过

我知道我们可以添加一个外部XML映射文件来动态更改数据上下文中的表名。但根据我在大多数文章中看到的情况,只有在表结构相同(相同的列和主键)的情况下才能做到这一点

我想知道的是,当新表与当前上下文中的表不同时,是否有一种方法可以动态地将其添加到数据上下文中


或者可以从实体框架中实现这一点吗?

我会直截了当地说不,因为ORM不提供动态运行时模型,它是您查询的数据集的预构建静态模型

然后,要使其动态化,您真正需要做的就是根据需要重新构建它。这将要求您在添加新表或列时调用构建,但这不是不可能的。这可以通过多种方式实现


然而,如果这是您的问题,您不应该尝试使用像LINQtoSQL这样的ORM来解决这个问题。它从来不是为这个而建的。我还建议使用entity framework,因为它在各个方面都取代了linq到sql(并且linq到sql不再开发)。

另一种方法是首先使用EF 4.1代码,您可以动态生成和编译代码,并将其加载到您的应用程序域中。我想您也可以使用EF4.0的动态编译,但是Edmx和映射是复杂的


它将是新的上下文,您将无法更改现有的上下文,但可以合并到新的类库中。但这一切都必须发生在反射上,因为在linq编译时没有可用的泛型类型

其实我问这个问题是出于好奇。。。因此,如果我们使用实体框架,我们可以在运行时动态更新EDM吗?不,但是实体框架比Linq to Sql更好。