web-dev-qa-db-ja.com

Entity Frameworkは、主キー値に対してGUIDをどのように生成しますか?

ASP.NETアプリケーションを実行してユーザーを登録すると、Entity Frameworkは自動的にAspNetUserテーブルに一意のID(PK)を設定します。

enter image description here

IDが有効になっているAspNetUserClaimsを除き、他のAspNetRoles、AspNetUserLogins、AspNetUserRolesについても同様です。

Entity Frameworkがこの一意のIDを作成する方法を説明できる人はいますか?また、EFでIDを無効にして独自のテーブルを作成する場合、主キーのこの種のIDはどのように生成しますか?

8
Shivam Sharma

GUIDは_Entity Framework_でもSQLでも生成されません。Identity frameworkによって処理されます。 _IdentityModels.cs_へ

_public class ApplicationUser : IdentityUser
{
   // ...
}
_

このクラスは_Microsoft.AspNet.Identity.EntityFramework.IdentityUser_から継承され、このクラスのコンストラクターは( Source )として定義されます

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

GUIDはコンストラクターで生成されます。これは他のIDテーブルでも同じです。

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

7

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

SQL Serverで挿入時に値を生成できるようにするには、モデルで次の属性を使用する必要があります。

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

または、IDを自分で管理する場合は、生成するだけです:

var id = Guid.NewGuid();
22
PMerlet

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

3
Dai

Identity in ASP .NET、idはdb(uniqueidentifierデータ型)で自動的に生成されます。C#では、GUID=メソッドを使用して生成できますGuid.NewGuid()

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

ここに C# および T-SQL があります

2
M. Wiśnicki

これは、EFの直接的な機能というより、SQL Serverの機能だと思います。 EFは、IDがオンのunique-idフィールドを持つテーブルを作成します。自分でそれをしたい場合は、unique-idフィールドが必要です。オブジェクトには、Guid.NewGuid() forに割り当てるGUIDproperty Idが必要です。

役立つことを願っています

0
K. Berger

eFコアおよびポコ:

...
.Property(p => p.Id)
    .ValueGeneratedOnAdd()
;
0
Omid-RH