我在ASP.NET Core应用程序上使用带有MySql扩展的Entity Framework。我的一个域模型Message
具有Guid属性,当我想在我的DbContext上执行任何操作时,我收到错误:The property 'Message.ID' is of type 'Guid' which is not supported by current database provider. Either change the property CLR type or manually configure the database type for it.
。
我如何"手动配置数据库类型'?我已经读过它应该映射到CHAR(36),但我无法在应用程序端找到如何做到这一点。
@UPDATE
当我将属性[Column(TypeName = "char(32)")]
设置为Guid
属性时,错误仍然存在。
此方法也不起作用
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var messageEntity = modelBuilder.Entity< Message>();
messageEntity.Property(x => x.ID).
HasAnnotation("Column", new { TypeName = "char(32)" });
}
答案 0 :(得分:6)
我有这个问题,我就这样解决了:
我从项目中删除了MySql.Data.EntityFrameworkCore
我在Nuget
和Guid
之后安装了Pomelo.EntityFrameworkCore.MySql
数据提供程序正确映射UseMySQL
。
我将方法名称UseMySql
更改为using Microsoft.EntityFrameworkCore;
,并在Startup.cs
添加了Guid
:
services.AddDbContext(options =&gt;
options.UseMySql(Configuration.GetConnectionString( “MyContext”)));
请务必确保char(36)
是数据库中的数据类型{{1}}。
答案 1 :(得分:2)
我已经使用Database First方法在常规ASP.NET(非Core)中成功使用了Guid
类型和MySql EF。
为此,我将MySql中的列类型定义为BINARY(16)
。
我开发该模型已经有一段时间了,但我想我记得MySql EF提供程序会自动将BINARY(16)
映射到EF模型中的System.Guid
。
您必须使用oldguids=true
连接字符串属性,以便MySql使用BINARY(16)
类型的guids而不是默认的CHAR(36)
。
我还认为创建列CHAR(36)
并在连接字符串中跳过oldguids=true
部分也会产生相同的结果。