2016-12-21 11 views
1

我々はASP.NETアプリケーションを実行し、ユーザーを登録すると、Entity Frameworkは、自動的にAspNetUserテーブルに一意のID(PK)を設定します:Entity Frameworkはプライマリキー値のGUIDをどのように生成しますか?

enter image description here

同じことが他のAspNetRoles、AspNetUserLogins、AspNetUserRoles についても同様ですIDを有効にしたAspNetUserClaimsを除きます。

エンティティフレームワークがこの一意のIDをどのように作成するか説明できますか?また、EFでIDを無効にして独自のテーブルを作成したい場合は、この種類の主キーIDをどのように生成しますか?

+0

_Why_プライマリキーの値としてGUIDを使用しますか?それは古い32または64ビットの整数に比べてかなりの欠点があります。あなたはまた、 "アイデンティティ"と "int"を混同しているようです。 "identity"を設定すると、データベースはタイプに関係なく、新しい行の主キー値を生成します(ただし、サポートされている型の場合のみ)。 – CodeCaster

+0

エンティティフレームワークがこれを行います。 –

+0

私はあなたの_に応えています。 "そして私たち自身のテーブルを作成したいのであれば、この種のIDをどのように生成しますか?"なぜあなたのテーブルのPKとしてGUIDを使いたいのですか? – CodeCaster

答えて

2

を見つけます。それはアイデンティティ・フレームワークによって処理されます。ただ、このクラスはMicrosoft.AspNet.Identity.EntityFramework.IdentityUserから継承されており、このクラスのコンストラクタは(Source)のように定義されてIdentityModels.cs

public class ApplicationUser : IdentityUser 
{ 
    // ... 
} 

に移動

public IdentityUser() 
{ 
    Id = Guid.NewGuid().ToString(); 
} 

だから、GUIDは、コンストラクタで生成されます。これは他のIdentityテーブルについても同じです。

注:Idフィールドはデータベースにvarchar (string)です。

15

この一意のIDは、挿入時にSQL Serverによって作成されます。

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
[Key] 
public Guid Id { get; set; } 

それとも、自分で同上を管理したい場合は、それを生成します。あなたは、SQL Serverは、インサート上の値を生成するようにしたい場合は

、あなたは、モデル内の次の属性を使用する必要があります。

var id = Guid.NewGuid(); 
3

EFはその値を生成していません。これは、新しい行がINSERTされたときにSQL Serverによって自動生成されるGUID(T-SQLではuniqueidentifier)の値です。

0

これは、EFよりもSQLサーバーの機能のほうが多いと思います。 EFはIDを持つ一意のIDフィールドを持つテーブルを作成します。 自分でやりたい場合は、unique-idフィールドが必要です。オブジェクトにはGUIDプロパティIdがあり、これには例えばGuid.NewGuid()を割り当てます。

ASP .NETでIdentityを使用

2

を助けるホープは、IDが自動的にDB(UNIQUEIDENTIFIERデータ型)で生成されます。 C#であなたがGuid.NewGuid()

A GUIDは、一意の識別子が必要とされる限り、すべてのコンピュータとネットワーク間で使用することができる128ビットの整数(16バイト)である方法を使用して、GUIDを生成することができます。このような識別子は、複製される可能性が非常に低い。ここで

あなたはGUIDがEntity FrameworkでもSQLによって生成されていないC#T-SQL

+0

したがって、ユーザーが作成されると、EFはこのIDを生成するか、SQL Serverによって自動的に生成されます。 –

関連する問題