【发布时间】: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<string>("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