gpt4 book ai didi

c# - 如何在带有 Entity Framework 的 ASp.net 应用程序中同时使用 MySQL 和 MSSQL

转载 作者:可可西里 更新时间:2023-11-01 08:07:29 26 4
gpt4 key购买 nike

我编写了一个 ASp.net C# .NET 4.0 应用程序并使用了 Ms SQL2008 DB。

这是一个 2 层应用程序...BLL/DAL 和 UI

我用过
- 表格(具有多个索引以使记录唯一)
- 表之间的关系(1 到 m 关系)
- 数据模型 Entity Framework
- LINQ(更新/插入/选择/删除)

我没用过
- 存储过程
- 观点
- TSQL
- 无需手动 SQL 操作
-等等

因此,如果您看到它的设置非常简单。应用使用MsSQL2008 DB

所以我的问题是:我需要使用MySQL(客户要求)。

我需要做什么?由于我使用了 Entitiy Framework,我认为这应该很容易完成,对吧?

我怎样才能使应用程序可以使用 MySQL/或可以同时支持两者(我的 SQL/Mysql)。

请指教?

最佳答案

EDMX文件由三部分组成:

  • SSDL - 数据库的描述。这部分包括有关使用的数据库服务器的信息
  • CSDL - 类(class)描述
  • 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 用于 MSSQL 服务器,工件部署到 bin 目录 + 单独的后处理,它将采用 SSDL 并自动为 MySQL 创建第二个。这是恕我直言的最佳选择。您需要检测 MySQL 和 MSSQL 之间使用类型的差异(您可以使用@ChristiaanV 描述的技巧来查找这些差异,但请确保备份您的 EDMX,因为您将不得不还原它)并编写自定义控制台应用程序、脚本或 XSLT将 MsSQL 的 SSDL 转换为 MySQL 的 SSDL 的转换。您将以一个 CSDL、一个 MSL 和两个 SSDL 结束,其中第二个是从第一个自动生成的。

要使其在运行时运行,您需要 EF 的 MySQL 提供程序 - 例如@Christaan​​V 提到的连接器,您必须在 MSSQL 和 MySQL 的连接字符串中引用正确的 SSDL。

顺便说一句。下次在开发应用程序之前了解哪个数据库客户需要。为客户不支持的平台开发应用是真正的分析/需求失败。

关于c# - 如何在带有 Entity Framework 的 ASp.net 应用程序中同时使用 MySQL 和 MSSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8613718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com