我可以为.net Entity Framework项目使用两个不同的后端吗?
我需要在可用时支持SQL Server上存储过程的完全可编程性支持。当SQL服务器不可用时,我只需要支持.mdb文件中的表结构。
实体框架上方的所有业务逻辑都使用实体抽象而不是直接进入数据库。实体模型可以使用存储过程调用或动态sql来读/写数据库表。
是否可以创建两个逻辑上相同的实体模型,每个模型具有与数据库不同的映射(一个由框架管理,一个由存储过程管理),并且在运行时基于后端提供的功能在它们之间切换 - 终端存储机制?
答案 0 :(得分:2)
你应该看到this similar SO question。我不确定你是否可以在运行时这样做,但我发现在部署之后这是可能的。当心,肯定存在陷阱。
在不同数据库后端之间生成的EDMX文件之间的主要区别是MSL和SSDL。我所做的是与每个数据库分开生成EDMX文件。它们都具有相同的逻辑数据模型(CSDL)。然后我提取MSL和SSDL文件并将其保存到单独的文件中。完成后,您可以在连接字符串中指定这些文件的确切位置(如图所示):
<add name="DBConnection" connectionString="metadata=C:\sqlServerEntities.csdl|C:\sqlServerEntities.ssdl|C:\sqlServerEntities.msl;provider=System.Data.SqlClient;provider connection string="Data Source=[machinename];Initial Catalog=[databasename];Persist Security Info=True;User ID=[user];Password=[password];MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
<add name="DBConnection" connectionString="metadata=C:\mdbEntities.csdl|C:\mdbEntities.ssdl|C:\mdbEntities.msl;provider=[mdb provider namespace];provider connection string=[DB connection string]" providerName="System.Data.EntityClient" />
您必须在运行时根据要连接的数据库使用适当的连接字符串。我担心你可能在一个场景中使用STP而在另一个场景中使用基于表的映射有困难。
另一个注意事项:您不能将EDMX模型留在项目中,否则您将创建编译器错误(基于重复的类定义)。但是,您必须在项目中保留一个,以便编译器知道生成的逻辑类。