MySQLNumberTypeMapping'不支持价值转化

时间:2018-05-31 21:16:48

标签: mysql .net entity-framework .net-core

我添加了一些模型,用于连接到SQL数据库,现在移植到MySQL。我在运行时收到此错误:dotnet ef update --context {context}

  

块引用   System.NotImplementedException:' MySQLNumberTypeMapping'不支持价值转换。对价值转换的支持通常需要更改数据库提供程序。      在Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping.Clone(ValueConverter转换器)      在Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.b__7_0(ValueTuple 3 k) at System.Collections.Concurrent.ConcurrentDictionary 2.GetOrAdd(TKey key,Func 2 valueFactory) at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindMappingWithConversion(RelationalTypeMappingInfo& mappingInfo, IReadOnlyList 1 principalals)      在Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindMapping(MemberInfo成员)      在Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.PropertyDiscoveryConvention.IsCandidatePrimitiveProperty(PropertyInfo propertyInfo)      在Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.PropertyDiscoveryConvention.Apply(InternalEntityTypeBuilder entityTypeBuilder)      在Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnEntityTypeAdded(InternalEntityTypeBuilder entityTypeBuilder)      在Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.RunVisitor.VisitOnEntityTypeAdded(OnEntityTypeAddedNode node)      在Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ConventionVisitor.VisitConventionScope(ConventionScope节点)      在Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ConventionVisitor.VisitConventionScope(ConventionScope节点)      在Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ConventionBatch.Run()      在Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.RelationshipDiscoveryConvention.DiscoverRelationships(InternalEntityTypeBuilder entityTypeBuilder)......

' MySQLNumberTypeMapping'不支持价值转换。对价值转换的支持通常需要对数据库提供商进行更改。

我希望创建的表格在这里:(我已经删除了对DataType(*)或枚举的任何引用,但我可能是MySQL的问题。

[Key]
public int ID { get; set; }
[StringLength(50)]
public string Name { get; set; }
public int? PropertyID { get; set; }
public Property Property { get; set; }

//public SelectList Animals { get; set; }
//public string AnimalTypes { get; set; }
[Display(Name="Spesie")]
public int? AnimalTypeID { get; set; }
[Display(Name = "Spesie")]
public AnimalType AnimalType { get; set; }

public bool Male { get; set; }
public bool Trophy { get; set; }
public int Quantity { get; set; }
[DisplayFormat(ApplyFormatInEditMode = false, DataFormatString = "R{0:N}")]
public decimal Price { get; set; }
[StringLength(2000)]
public string Comments { get; set; }

为什么MySQL不喜欢这些定义?或者它试图做的转换是什么?

3 个答案:

答案 0 :(得分:14)

为了继续开发,我发现了一个合适的解决方案是

  

安装软件包Pomelo.EntityFrameworkCore.Mysql -version   2.1.0-rc1-final

使用nuget控制台并修改选项的任何引用。将MySQL用于options.UseMySql。

这使我可以继续使用dotnet 2.1并利用mysql数据库。

希望这会有所帮助!

答案 1 :(得分:1)

MySQL数据提供程序未实现值转换功能。您将获得此异常,因为您使用枚举作为数据类型,这些数据类型必须由未实现此功能的MySQL数据提供程序转换,因此会抛出NotImplementedException。

此错误已报告:https://bugs.mysql.com/bug.php?id=89855

还有一个开放的github问题:https://github.com/aspnet/EntityFrameworkCore/issues/11078

  

简而言之,在.Net Core 2.0上运行的MySQL.Data.EntityFrameworkCore,   使用时无法正常工作   尽管如此,Microsoft.EntityFrameworkCore.Relational 2.1.0-preview1-final   声称2.0符合条件的提供商应该对其进行处理。

答案 2 :(得分:0)

我能够通过将MySQL.Data.EntityFrameworkCore从6.10.8升级到8.015(于2019年2月1日发布)并将.NET Core从2.0升级到2.2来解决此问题。

我认为问题出在fixed in version 8