Mysql Entity Framework上的Guid属性

时间:2017-07-15 16:02:43

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

我在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)" });
}

2 个答案:

答案 0 :(得分:6)

我有这个问题,我就这样解决了:

  1. 我从项目中删除了MySql.Data.EntityFrameworkCore

  2. 我在NugetGuid之后安装了Pomelo.EntityFrameworkCore.MySql 数据提供程序正确映射UseMySQL

  3. 我将方法名称UseMySql更改为using Microsoft.EntityFrameworkCore;,并在Startup.cs添加了Guid

  4. 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部分也会产生相同的结果。