TIMESTAMPフィールドを使用して並行処理を行い、他のデータベースとの同期のためのレコードを決定するEFおよび以前に設計されたカスタムORMを初めて導入しました。Entity Framework ConcurrencyStampがROWVERSION/TIMESTAMPを使用しないのはなぜですか?
なぜEF(Core)はnvarchar(max)を使用してGuidのように見えるのでしょうか?
つまり、EFはDBが代わりに動作している可能性がありますか?
わかりやすいことは、複数のGuidをそこに格納したい場合や、ROWVERSION/TIMESTAMPが対象となるDBで一貫して実装されていないためです。 EFによって?
(似たノートに、なぜIDフィールドのデータ型はnvarchar(450)がある?)
UPDATE:
migrationBuilder.CreateTable(
name: "AspNetRoles",
columns: table => new
{
Id = table.Column<string>(nullable: false),
ConcurrencyStamp = table.Column<string>(nullable: true),
Name = table.Column<string>(maxLength: 256, nullable: true),
NormalizedName = table.Column<string>(maxLength: 256, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetRoles", x => x.Id);
});
EFはそのために 'nvarchar(MAX)'を使用すべきではなく、EF6ではそれを使用してはいけません。どこかに設定上の問題があるかもしれませんが、これがEF Coreで実際に変更された場合、それは機能ではなくバグだと思われます。あなたのクラス定義とマッピング、および生成されたテーブルを表示できますか? "(同様の理由でIDフィールドがnvarchar(450)であるのはなぜですか?") - これは無関係であり、おそらく最善のものですが、SQL Serverの警告で問題を特定できることに注意してください。それはEFの外で 'nvarchar(MAX) 'です。 – hvd
ここに、データタイプのスクリーンショットがある別の投稿があります:http://stackoverflow.com/questions/34252640/what-is-the-purpose-of-the-concurrencystamp-column-in-the-aspnetusers-table-in- t – Etherman