gpt4 book ai didi

c# - 让 Entity Framework 生成带有 MySQL 所需的反引号标识符的 SQL

转载 作者:行者123 更新时间:2023-11-29 10:15:49 25 4
gpt4 key购买 nike

我正在尝试让代码优先 Entity Framework 与现有的 MySQL 数据库一起使用。我从 NuGet 获得了 Entity Framework v6.2.0 和 MySQL.Data.Entity v6.9.11。我确实尝试过 MySQL.Data.Entity v6.10.7,但在被相同的 Inheritance security rules problem 阻止后恢复到 6.9.11正如这个问题。

配置包含以下内容(由于显而易见的原因删除了用户名和密码):

  <connectionStrings>
<add name="MySql" providerName="MySql.Data.MySqlClient" connectionString="SERVER=sql-dev;Database=pen;UID=****;PWD=****;Allow User Variables=True;" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>

通过恢复到 v6.9.11,我已经可以查询 DbSet 并查看它在调试器中生成的 SQL。我可以连接,并且它识别出架构是正确的,但是当我尝试执行简单的测试查询时,它失败了。

 Assert.IsTrue(context.BinLocs.Count() > 0);

使用调试器我发现它失败了,因为它生成的 SQL 查询使用了针对 SQL Server 优化的语法,而该语法不适用于 MySQL。

Entity Framework 生成的 SQL 是:

SELECT 
[Extent1].[TID] AS [TID],
[Extent1].[zone] AS [zone],
[Extent1].[ProdCode] AS [ProdCode],
[Extent1].[chute] AS [chute]
FROM [dbo].[tbl_s_products_binlocs] AS [Extent1];

不幸的是,数据库已设置为使用 ` 作为引号标识符,并且没有 dbo 架构。知道这一点后,我可以通过手动更改 SQL 以考虑到这一点,轻松地使该 SQL 工作:

SELECT 
`Extent1`.`TID` AS `TID`,
`Extent1`.`zone` AS `zone`,
`Extent1`.`ProdCode` AS `ProdCode`,
`Extent1`.`chute` AS `chute`
FROM `tbl_s_products_binlocs` AS `Extent1`;

当我对数据库运行此 SQL 时,我得到了预期的结果。我无法更改数据库期望引用标识符的方式,因为已经有遗留程序必须保持运行并采用此语法。因此,我需要让 Entity Framework 生成可与现有数据库配合使用的 SQL。

如何让 Entity Framework 生成带有 MySQL 所需的反引号标识符的 SQL?

<小时/>

已更新以包含配置设置

最佳答案

您需要配置框架生成器。

关注this .

关于c# - 让 Entity Framework 生成带有 MySQL 所需的反引号标识符的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50132787/

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