【问题标题】:MySQL EF Core all string fields are create as text columnsMySQL EF Core 所有字符串字段都创建为文本列
【发布时间】:2017-08-11 05:47:19
【问题描述】:

使用 Entity Framework Core for MySQL 生成我的表时,所有字符串属性都在 MySQL 中创建为文本列

我正在使用:

<PackageReference Include="MySql.Data" Version="8.0.8-*" />
<PackageReference Include="MySql.Data.EntityFrameworkCore" Version="8.0.8-*" />

我正在尝试使用 .net 中的内置身份验证,当我生成表时出现错误:

BLOB/TEXT column 'NormalizedEmail' used in key specification without a key length

我可以通过添加来解决这个问题:

builder.Entity<IdentityRole>().Property(i => i.NormalizedName)
                                  .HasColumnType("varchar(256)");

但我不想对身份模型中的每一列都执行此操作,也不想将我添加的列(如 FirstName)存储为文本列。

这是 EF Core for MySQL 中的一个错误,还是我有一些配置错误?

【问题讨论】:

  • 本应如此。仅当您有限制(MaxLength/.HasMaxLength)时,才可以选择 var char。对于所有其他情况,您必须自己覆盖/指定它
  • 查看迁移快照中生成的内容,它被指定为最大长度,但仍被创建为文本字段b.Property&lt;string&gt;("NormalizedUserName").HasMaxLength(256);
  • 我尝试了 MySql.Data 和 MySql.Data.EntityFrameworkCore 的 7.0.7-* 版本,生成为文本列的列生成为 varchar(255)。在我得到更好的答案之前,我会坚持使用 7.0.7。
  • 试试 Pomelo MySQL Provider,它更稳定并且有真正的异步。 Oracles 提供者不使用真正的异步(它使用同步而不是异步,因此在使用异步方面没有任何好处),因此无论如何在异步操作期间释放请求线程不会有任何好处
  • 感谢@Tseng 我切换到了 Pomelo,现在似乎一切正常。我最初尝试了 7.0.7,但似乎遇到了异步问题。 Pomelo 解决了。

标签: mysql entity-framework asp.net-core entity-framework-core


【解决方案1】:

感谢@Tseng 推荐使用 Pomelo。这是一个简单的开关,它解决了我所有的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-07
    • 2014-05-27
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    相关资源
    最近更新 更多