我添加了一些模型,用于连接到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,Func2 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不喜欢这些定义?或者它试图做的转换是什么?
答案 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。