2016-12-08 3 views
1

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); 
    }); 
+0

EFはそのために 'nvarchar(MAX)'を使用すべきではなく、EF6ではそれを使用してはいけません。どこかに設定上の問題があるかもしれませんが、これがEF Coreで実際に変更された場合、それは機能ではなくバグだと思われます。あなたのクラス定義とマッピング、および生成されたテーブルを表示できますか? "(同様の理由でIDフィールドがnvarchar(450)であるのはなぜですか?") - これは無関係であり、おそらく最善のものですが、SQL Serverの警告で問題を特定できることに注意してください。それはEFの外で 'nvarchar(MAX) 'です。 – hvd

+0

ここに、データタイプのスクリーンショットがある別の投稿があります:http://stackoverflow.com/questions/34252640/what-is-the-purpose-of-the-concurrencystamp-column-in-the-aspnetusers-table-in- t – Etherman

答えて

1

これは、ASP.NETコアアイデンティティの疑問設計上の決定ではなく、問題のように思えますEntity Frameworkコアでそれらはpublic virtual string ConcurrencyStamp { get; set; }を使用しますが、RowVersion/Timestamp列の場合、エンティティフレームワークはbyte[]を追加の注釈またはマッピングと共に使用して、更新後に値を再読み込みすることをEFが理解していることを確認します。 one of EF's own test filesから:あなた自身をEF使用する場合

public class Two 
{ 
    [Key] 
    public int Id { get; set; } 

    [StringLength(16)] 
    public string Data { get; set; } 

    [Timestamp] 
    public byte[] Timestamp { get; set; } 

    public virtual C NavC { get; set; } 
} 

、あなたは何の問題もなくRowVersion/Timestamp列を使用することができるはずです。

+0

私は、いくつかの標準/慣習を理解していないときには、急いで新しいフレームワークを実装し、ホイールを再発明しようとしている(間違いなく間違いありません)のは普通です。私はここでそれを避けようとしています。ここで文字列を使用する理由がいくつかありますが、私のプロジェクトの大部分がスケーラブルな並行性と同期の問題を含んでいると思っています。しかし、私はあなたに同意します、今はアイデンティティの設計選択肢のように私には特にEFではないように見えます。 – Etherman

関連する問題