如何确定在执行时如何生成 NHibernate 实体密钥
本文关键字:NHibernate 实体 密钥 何生成 何确定 执行 | 更新日期: 2023-09-27 18:31:22
我已经将身份实体框架项目改编为NHibernate版本。现在我有一个这样的ApplicationUser
类:
public class ApplicationUser : IdentityUser<TKey>
{
// TODO Auto determine if Id must be generated here or at DB.
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser, TKey> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
在我当前的项目中,我们对所有内容都使用 int
键,由数据库中的Identity
字段提供支持。在这种情况下,我更喜欢该方法生成一个负的 int 临时 id,而不是使用 manager.CreateIdentityAsync
,但是如果我像通常使用的那样使用 Identity,并且typeof(TKey)
string
,我希望这种方法正常工作。
但是,注意,我不关心 id 的类型,而是我是否必须在我的应用程序中生成它,或者数据库是否会为我生成它,这就是我想在运行时找出的。
您需要
可以使用SessionFactory
获取标识符生成器:
var generator = ((ISessionFactoryImplementor)Session.SessionFactory)
.GetIdentifierGenerator(typeof(TEntity).FullName);
if (generator is Assigned)
{
// Generate the identifier
}