我编写了一个asp.net c.net 4.0应用程序,并使用了ms sql2008数据库。
这是一个两层应用程序…BLL/DAL和UI
我用过
-表(使用多个索引使记录唯一)
-表之间的关系(1到m关系)
-数据模型的实体框架
-LINQ(更新/插入/选择/删除)
我没用过
-存储过程
-视图
-TSQL语言
-无手动SQL操作
-等等。
所以如果你看到这是非常容易的设置。应用程序使用mssql2008 db
所以我的问题是:我需要使用mysql(客户端请求)。
我需要做什么?既然我使用了实体框架,我认为这应该很容易做到,对吧?
如何使应用程序可以使用my sql/或同时支持两者(我的sql/mysql)。
请给我建议?

最佳答案

EDMX文件由三部分组成:
ssdl-数据库的描述。此部分包括有关已用数据库服务器的信息
csdl-您的类的描述
msl-ssdl和csdl工件之间映射的描述
如果要使用多个数据库服务器,则每个服务器必须至少有单独的ssdl(如果要为每个数据库使用不同的表名或列名,则还必须有单独的msl)。
编译库时,这三个部分将被提取到单独的文件中,并作为资源包含到编译的dll中。这些都是从ef连接字符串引用的奇怪的东西。您可以切换generation in EF designer,这些文件将被部署到您的bin目录。
支持多个数据库服务器的问题是需要多个ssdl文件。vs和ef设计器只允许在edmx中使用ssdl,每个edmx只能有一个ssdl。因此,支持多个数据库的选项是:
为每个服务器分离EDMX。这会带来很大的问题,因为必须同步它们,并且必须确保csdl部分完全相同。
一个CSDL,一个MSL,两个SSDLs在你的项目中。同样,这确实有问题,因为这意味着有一个主edmx和单独的ssdl(它是xml文件),在这里您将再次维护所有的db描述。
mssql服务器只有一个edmx,工件部署到bin目录+单独的后处理,这将采用ssdl并自动为mysql创建第二个edmx。这是我最好的选择。您需要检测mysql和mssql之间所用类型的差异(您可以使用@christiaanv描述的技巧来查找这些差异,但要确保备份edmx,因为您必须还原它),并编写自定义控制台应用程序、脚本或xslt转换,它们将将mssql的ssdl转换为mysql的ssdl。您将以一个csdl、一个msl和两个ssdl结束,其中第二个是从第一个自动生成的。
要使它在运行时工作,您需要ef的mysql provider-例如@christaanv提到的连接器,并且您必须在mssql和mysql的连接字符串中引用正确的ssdl。
顺便说一下,下次在开发应用程序之前,先了解一下db客户需要什么。对于客户不支持的平台开发应用程序是真正的分析/需求失败。

08-16 22:02