web-dev-qa-db-ja.com

MySQLNumberTypeMapping 'は値の変換をサポートしていません

SQLデータベースへの接続に使用していたいくつかのモデルを追加し、現在MySQLに移植しています。実行するとこのエラーが発生します:_dotnet ef update --context {context}_

Blockquote System.NotImplementedException: 'MySQLNumberTypeMapping'は値の変換をサポートしていません。値の変換をサポートするには、通常、データベースプロバイダーの変更が必要です。 Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping.Clone(ValueConverter converter)at 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 principals)at Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.PropertyDiscoveryConvention.IsCandidatePrimitiveProperty(PropertyInfo propertyInfo)のMicrosoft.EntityFrameworkCore.Metadata.Conventions.Internal.PropertyDiscoveryConvention.Apply.EntityFrameworkEntityFrameFrameEntityFrameFrameのストレージ.RelationalTypeMappingSource.FindMapping(MemberInfo member) Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnEntityTypeAdded(InternalEntityTypeBuilder entityTypeBuilder)at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.RunVisitor.VisitOnEntityTypeAdded(OnEntityTypeAdd.NodeityConditionDataFrame.Con.EntityTypeAdd.NodeityConditionDataFrame.Condition。 Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ConventionVisitor.VisitConventionScope(ConventionScope node)のMicrosoft.EntityFrameworkCore.Metadata.ConventionsConchers.Internal.ConternalDiscover.Internal.ConternalDiscover.Internal.ConventionDispatcher.Internal.ConternalDiscover.Internal.ConventionDispatcher.Internal.ConventionDispatcher.Internal.ConventionDispatcher.Internal.ConventionDispatcher.Internal.ConventionDispatcher.Internal.ConventionDispatcher.Internal.ConventionDispatcher.Internal.ConventionDispatcher.Internal.ConternalDisconcherConchers.Internal.ConternalDisconcher.Internal.ConternalDisconcher.ConternalDisconcher.Internal.ConternalDisconcher.Internal.ConventionDispatcher.Internal.Conternal.ConternalDisconcherConcher )at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.RelationshipDiscoveryConvention.DiscoverRelationships(InternalEntityTypeBuilder entityTypeBuilder)...

「MySQLNumberTypeMapping」は値の変換をサポートしていません。値の変換をサポートするには、通常、データベースプロバイダーの変更が必要です。

作成されることが予想されるテーブルの一部を以下に示します。

_[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がこれらの定義を好まないのはなぜですか?または、この値変換は何をしようとしているのですか?

10
Shane_Yo

開発を続けるために、私は適切な解決策が

インストールパッケージPomelo.EntityFrameworkCore.Mysql -version 2.1.0-rc1-final

nugetコンソールを使用して、options.UseMySQLをoptions.UseMySqlに変更します。

これにより、dotnet 2.1を続行し、mysqlデータベースを利用することができました。

お役に立てれば!

18
Mitchell

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
MUG4N

MySQL.Data.EntityFrameworkCoreを6.10.8から8.015(2019年2月1日リリース)にアップグレードし、.NET Coreを2.0から2.2にアップグレードすることで、この問題を修正できました。

この問題はバージョン8で 修正されたと思います

0
chakeda