Script-Migrationコマンドを実行します。
Entity Framework Core 3.0.0は、プロバイダー「Pomelo.EntityFrameworkCore.MySql」をオプションで使用して「ApplicationDbContext」を初期化しました:MaxPoolSize = 128 ServerVersion 5.7.22 MySql
ASP.NET CoreIdentity用に生成されたSQLスクリプトにエラーが含まれています。 データベースでスクリプトを(最初のCREATE TABLEだけで)実行しようとすると、エラーメッセージが表示されます。
nvarcharとnvarchar(max)が問題のようです。
CREATE TABLE AspNetRoles
(
Id
nvarchar(450)NOT NULL、
Name
nvarchar(256)NULL、
NormalizedName
nvarchar(256)NULL、
ConcurrencyStamp
nvarchar(max)NULL、
CONSTRAINT PK_AspNetRoles
主キー( Id
)
);
分析中に4つのエラーが見つかりました。
認識されないデータ型。 (39位の「nvarchar」の近く)
認識されないデータ型。 (75位の「nvarchar」の近く)
認識されないデータ型。 (117位の「nvarchar」の近く)
認識されないデータ型。 (位置161の「nvarchar」の近く)
SQLクエリ:
CREATE TABLE AspNetRoles
( Id
nvarchar(450)NOT NULL、 Name
nvarchar(256)NULL、 NormalizedName
nvarchar(256)NULL、 ConcurrencyStamp
nvarchar(max)NULL、CONSTRAINT PK_AspNetRoles
プライマリキー( Id
))
MySQLによると:ドキュメント
CONSTRAINT `PK_AspNetRoles` PRIMARY KEY (`Id`)
) '5行目
MySQLバージョン:5.7.22
オペレーティングシステム:Windows 10
Pomelo.EntityFrameworkCore.MySqlバージョン:3.0.0-rc1.final
Microsoft.AspNetCore.Appバージョン:3.0
#863を再現しようとすると、内部で同じ移行クラスを使用するdotnet ef update database
コマンドで同じエラーが発生します。 今これをチェックしています。
これは、(認証オプションを有効にして)新しいASP.NET Coreプロジェクトを作成し、EF CoreプロバイダーをPomelo.EntityFrameworkCore.MySql
に変更してから、移行または更新コマンドを実行した場合に発生する可能性があります。
問題は、VSがSQL Serverを使用することを想定していたため、最初の移行CreateIdentitySchema
をファイル.\Data\Migrations\00000000000000_CreateIdentitySchema.cs
( Up
を含む)にすでに追加していることです。 Down
操作)および.\Data\Migrations\00000000000000_CreateIdentitySchema.Designer.cs
(データベースに大きく依存するターゲットモデルを含む)。これらはSQLServerプロバイダーを使用して生成されました。
SQL Serverを使用している場合、これは確かに面倒な作業が1ステップ少なくなります。 ただし、他のデータベースプロバイダーを使用している場合は、誤った移行が含まれます。
SQL ServerではなくMySQLのみを使用している場合、これを修正する最も簡単な方法は、最初にUseMySql()
がConfigureServices
メソッドで呼び出されていることを確認することです。
`` `c#
options.UseMySql(
Configuration.GetConnectionString( "DefaultConnection"));
Then delete the entire `Migrations` folder and just run something similar to the following command, to recreate the initial migration compatible with MySQL:
dotnetefの移行によりCreateIdentitySchemaが追加されます
After that, the newly created initial migration will be compatible with MySQL and other operations based on that migration will be as well.
For example, the `CREATE TABLE` script for `AspNetRoles` when creating a migration script (by using `dotnet ef migrations script`) will look like this:
```sql
CREATE TABLE `AspNetRoles` (
`Id` varchar(255) NOT NULL,
`Name` varchar(256) NULL,
`NormalizedName` varchar(256) NULL,
`ConcurrencyStamp` longtext NULL,
CONSTRAINT `PK_AspNetRoles` PRIMARY KEY (`Id`)
);
これは、(認証オプションを有効にして)新しいASP.NET Coreプロジェクトを作成し、EF Coreプロバイダーを
Pomelo.EntityFrameworkCore.MySql
に変更してから、移行または更新コマンドを実行した場合に発生する可能性があります。問題は、VSがSQL Serverを使用することを想定していたため、最初の移行
CreateIdentitySchema
をファイル.\Data\Migrations\00000000000000_CreateIdentitySchema.cs
(Up
を含む)にすでに追加していることです。Down
操作)および.\Data\Migrations\00000000000000_CreateIdentitySchema.Designer.cs
(データベースに大きく依存するターゲットモデルを含む)。これらはSQLServerプロバイダーを使用して生成されました。
Pomelo.EntityFrameworkCore.MySqlバージョン2.2では、CreateIdentitySchemaを削除および再作成しなくても機能します。
生成されたテーブル作成スクリプト
CREATE TABLE `aspnetroles` (
`Id` varchar(255) NOT NULL,
`Name` varchar(256) DEFAULT NULL,
`NormalizedName` varchar(256) DEFAULT NULL,
`ConcurrencyStamp` longtext,
PRIMARY KEY (`Id`),
UNIQUE KEY `RoleNameIndex` (`NormalizedName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
エラーなしで、
3.0+が互換性と可用性のために同じように機能することを願っています。
この変更の理由はありますか?
ありがとう、
Pomelo.EntityFrameworkCore.MySqlバージョン2.2では、CreateIdentitySchemaを削除および再作成しなくても機能します。
Pomelo 2.2で変更なしで機能した場合、それはすばらしいことですが、構成(およびキーの種類)に大きく依存するため、一般化することはできません。
上記のように、新しいプロジェクトを作成するときに最初の移行を再生成して、有効な移行とモデル定義を確実に取得する必要があります。 そうでない場合は、自分で作成し、生成されたコードを少し調整して機能させる必要がある場合があります(これは、MySQLの知識によってはあまり労力をかけずに実行できます)。
3.0リリースにはいくつかの重大な変更があり(適切にタグ付けする必要があります)、メジャーまたはマイナーアップグレードの場合は、本番環境に移行する前に、開発環境とステージング環境で最初にコードをテストします。
エラーなしで、
[...]
この変更の理由はありますか?
3.0で具体的に話しているエラーと変更点は何ですか?
2.2.6から3.0.0に多くの変更が加えられたので、問題のあるモデルクラス、その定義、生成された移行、および結果のSQLスクリプトを自由に投稿してください。そうすれば、発生している問題について話し合うことができます。
最も参考になるコメント
これは、(認証オプションを有効にして)新しいASP.NET Coreプロジェクトを作成し、EF Coreプロバイダーを
Pomelo.EntityFrameworkCore.MySql
に変更してから、移行または更新コマンドを実行した場合に発生する可能性があります。問題は、VSがSQL Serverを使用することを想定していたため、最初の移行
CreateIdentitySchema
をファイル.\Data\Migrations\00000000000000_CreateIdentitySchema.cs
(Up
を含む)にすでに追加していることです。Down
操作)および.\Data\Migrations\00000000000000_CreateIdentitySchema.Designer.cs
(データベースに大きく依存するターゲットモデルを含む)。これらはSQLServerプロバイダーを使用して生成されました。SQL Serverを使用している場合、これは確かに面倒な作業が1ステップ少なくなります。 ただし、他のデータベースプロバイダーを使用している場合は、誤った移行が含まれます。
SQL ServerではなくMySQLのみを使用している場合、これを修正する最も簡単な方法は、最初に
UseMySql()
がConfigureServices
メソッドで呼び出されていることを確認することです。`` `c#
options.UseMySql(
Configuration.GetConnectionString( "DefaultConnection"));
dotnetefの移行によりCreateIdentitySchemaが追加されます