2017-07-15 94 views
1

我在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.關於Mysql實體框架的Guid屬性

如何「手動配置數據庫類型'?我讀過,它應該被映射爲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

您應該在DB和EF字符串中使用'char(32)'或更寬的字段來存儲GUID。您可以使用EF更新數據庫嚮導來更新表格,也可以手動更改EF db XML文件。將guid更改爲字符串,並將表結構更改爲char(36)。 –

+0

有沒有什麼辦法可以將Guid定義爲MySql的'char(32)'或'binary(16)'?所以我可以在沒有任何包裝的情況下使用Guid。 – Erexo

回答

1

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

爲了達到這個目的,我將MySql中的列類型定義爲BINARY(16)。 自從我開發該模型已經有相當長的一段時間了,但我想我記得MySql EF提供程序在EF模型中自動將BINARY(16)映射到System.Guid

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

我也認爲在連接字符串中製作列CHAR(36)和跳過oldguids=true部分也會導致相同的結果。

+0

我已將'oldguids = true'添加到連接字符串,但沒有任何更改。我想解決這個問題,但首先使用代碼。感謝您的答覆 – Erexo