我可以为 .net 实体框架项目使用两个不同的后端吗?
如果可用,我需要支持 SQL 服务器上存储过程的完整可编程性支持。当 SQL Server 不可用时,我只需要支持 .mdb 文件中的表结构。
实体框架之上的所有业务逻辑都使用实体抽象,而不是直接进入数据库。实体模型可以使用存储过程调用或动态 sql 来读取/写入数据库表。
是否可以创建两个逻辑相同的实体模型,每个模型与数据库的映射不同(一个由框架管理,一个由存储过程管理),并在运行时根据后端存储机制提供的功能在它们之间切换?
我可以为 .net 实体框架项目使用两个不同的后端吗?
如果可用,我需要支持 SQL 服务器上存储过程的完整可编程性支持。当 SQL Server 不可用时,我只需要支持 .mdb 文件中的表结构。
实体框架之上的所有业务逻辑都使用实体抽象,而不是直接进入数据库。实体模型可以使用存储过程调用或动态 sql 来读取/写入数据库表。
是否可以创建两个逻辑相同的实体模型,每个模型与数据库的映射不同(一个由框架管理,一个由存储过程管理),并在运行时根据后端存储机制提供的功能在它们之间切换?
你应该看到这个类似的 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" />
您必须根据要连接的数据库在运行时使用适当的连接字符串。我担心您可能难以在一种情况下使用存储过程,而在另一种情况下使用基于表的映射。
另一个注意事项:您不能将两个 EDMX 模型都保留在项目中,否则您将创建编译器错误(基于重复的类定义)。但是,您必须在项目中保留一个,以便编译器知道生成的逻辑类。