ASP.NETアプリケーションを実行してユーザーを登録すると、Entity Frameworkは自動的にAspNetUserテーブルに一意のID(PK)を設定します。
IDが有効になっているAspNetUserClaimsを除き、他のAspNetRoles、AspNetUserLogins、AspNetUserRolesについても同様です。
Entity Frameworkがこの一意のIDを作成する方法を説明できる人はいますか?また、EFでIDを無効にして独自のテーブルを作成する場合、主キーのこの種のIDはどのように生成しますか?
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)
です。
この一意のIDは、挿入時にSQL Serverによって作成されます。
SQL Serverで挿入時に値を生成できるようにするには、モデルで次の属性を使用する必要があります。
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid Id { get; set; }
または、IDを自分で管理する場合は、生成するだけです:
var id = Guid.NewGuid();
EFはその値を生成していません。それはGUID(T-SQLのuniqueidentifier
)値で、新しい行が挿入されるとSQL Serverによって自動生成されます。
これは、EFの直接的な機能というより、SQL Serverの機能だと思います。 EFは、IDがオンのunique-idフィールドを持つテーブルを作成します。自分でそれをしたい場合は、unique-idフィールドが必要です。オブジェクトには、Guid.NewGuid()
forに割り当てるGUID
property Id
が必要です。
役立つことを願っています
eFコアおよびポコ:
...
.Property(p => p.Id)
.ValueGeneratedOnAdd()
;