簡體   English   中英

Mysql 實體框架上的 Guid 屬性

[英]Guid property on Mysql Entity Framework

我在 ASP.NET Core 應用程序上使用帶有 MySql 擴展的實體框架。 我的域模型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. 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),但我在應用程序端找不到如何做到這一點。

@更新

當我將屬性[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)" });
}

我有這個問題,我解決了這個問題:

  1. 我從我的項目中刪除了MySql.Data.EntityFrameworkCore

  2. 我安裝了NugetNuget ,這個數據提供程序正確地映射了Guid

  3. 我將我的方法名稱UseMySQL更改為UseMySqlusing Microsoft.EntityFrameworkCore;添加using Microsoft.EntityFrameworkCore; Startup.cs

services.AddDbContext(options =>
options.UseMySql(Configuration.GetConnectionString( “MyContext”)));

請記住確保Guid是數據庫中的數據類型char(36)

我已經使用Database First方法在常規ASP.NET(而不是Core)中成功使用了帶有MySql EF的Guid類型。

為此,我將MySql中的列類型定義為BINARY(16) 自從我開發了這個模型以來已經有一段時間了,但我想我記得MySql EF提供程序會自動將BINARY(16)映射到EF模型中的System.Guid

您將不得不使用oldguids=true連接字符串屬性,以便MySql使用BINARY(16)類型作為guids而不是默認的CHAR(36)

我還認為在連接字符串中創建列CHAR(36)並跳過oldguids=true部分也會導致相同的事情。

在 Mihai 的回答之上,我遵循了相同的方法,但只是想問一下,如果我們使用十六進制函數將二進制 16 轉換為 UUID,我們是否期望相同的 Guid 值?

因為現在我得到了不同的值,將在 C# 中生成的 Guid 與從 MySQL Binary 16 列轉換的 UUID 進行比較。

不知道其他人是否有同樣的問題?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM