如何确定在执行时如何生成 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 的类型,而是我是否必须在我的应用程序中生成它,或者数据库是否会为我生成它,这就是我想在运行时找出的。

如何确定在执行时如何生成 NHibernate 实体密钥

您需要

可以使用SessionFactory获取标识符生成器:

var generator = ((ISessionFactoryImplementor)Session.SessionFactory)
    .GetIdentifierGenerator(typeof(TEntity).FullName);
if (generator is Assigned)
{
    // Generate the identifier
}