我已经编写了一个ASp.net C#.NET 4.0应用程序,并使用了SQL2008 DB女士.
这是一个2层应用程序… BLL / DAL和UI
我用过
-表(具有多个索引以使记录唯一)
-表之间的关系(1至m关系)
-数据模型实体框架
-LINQ(更新/插入/选择/删除)
我没用过
-储存程序
-意见
–Tsql
-无需手动SQL操作
-等
因此,如果您看到它,则安装非常简单.该应用程序使用MsSQL2008 DB
所以我的问题是:我需要使用MySQL(客户端请求).
我需要做什么?既然我已经使用了Entitiy Framework,我认为这应该很容易完成,对吧?
如何使应用程序可以使用MySQL /或同时支持两者(我的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,两个SSDL.同样,这确实是有问题的,因为这意味着只有一个主EDMX和单独的SSDL(这是XML文件),您将在其中再次维护所有数据库描述.
>只有一台EDMX for MSSQL服务器,其中部署了工件以对目录进行单独的后处理,这将占用SSDL并自动为MySQL创建第二个.这是恕我直言的最佳选择.您需要检测MySQL和MSSQL之间使用的类型之间的差异(可以使用@ChristiaanV描述的技巧来找到这些差异,但请确保备份EDMX,因为必须将其还原)并编写自定义控制台应用程序,脚本或XSLT转换会将MsSQL的SSDL转换为MySQL的SSDL.您将以一个CSDL,一个MSL和两个SSDL结尾,其中第二个是从第一个自动生成的.
要使其在运行时运行,您需要EF的MySQL提供程序-例如@ChristaanV提到的连接器,并且必须在MSSQL和MySQL的连接字符串中引用正确的SSDL.
顺便说一句.下次在开发应用程序之前了解哪个DB客户需要.对于平台客户不支持的应用程序开发是真正的分析/需求失败.
标签:asp-net,sql-server-2008,c,mysql,entity-framework
来源: https://codeday.me/bug/20191101/1987024.html