nhibernate - NHibernate:如何在亲子关系中强制生成 child 的ID

标签 nhibernate identity one-to-many

我在用户和 session 之间有一对多的父/子关系。这里是映射:

<class name="ApplicationUser" table="APPLICATION_USER" lazy="true">
    <id name="Id" column="APPLICATION_USER_ID">
         <generator class="guid.comb" />
    </id>
    <property name="UserName" column="USER_NAME" />
    <property name="Password" column="PASSWORD" />
    <bag name="UserSessions" lazy="true" cascade="all-delete-orphan" inverse="true">
        <key column="APPLICATION_USER_ID"></key>
        <one-to-many class="UserSession"></one-to-many>
    </bag>
</class>

<class name="UserSession" table="USER_SESSION" lazy="true">
    <id name="Id" column="USER_SESSION_ID">
         <generator class="guid.comb" />
    </id>
    <property name="Created" column="CREATED" />
    <many-to-one name="ApplicationUser" column="APPLICATION_USER_ID" class="ApplicationUser" unique="true" />
</class>

我在ApplicationUser中有一个简单的方法来创建 session 关系:
public virtual UserSession LogInUser()
{
    UserSession session = new UserSession() { ApplicationUser = this };
    _userSessions.Add(session);
    return session;
}

用户登录时,会发生多个数据库交互,这些交互被包装在事务中。除了创建新的用户 session 外,我还希望能够审核用户已登录,并将新的 session ID包含在审核数据中。但是,由于UserSession尚未持久,因此其ID为空。

我尝试保存ApplicationUser来生成用户 session ID:
IApplicationUserManager manager = ManagerFactory.GetApplicationUserManager();
ApplicationUser user = manager.GetById(userId);

user.LogInUser();
manager.Save(user);

我认为这将因为所有删除孤立级联设置而起作用,但事实并非如此。有没有办法在Flush()或事务提交之前强制生成ID?

最佳答案

有没有办法在Flush()或事务提交之前强制生成ID?

不。我将<generator class="assigned" />用于UserSession类,并在类的构造函数中对其进行初始化。

另外,您可能需要三思而后行将密码公开为属性。

关于nhibernate - NHibernate:如何在亲子关系中强制生成 child 的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4391321/

相关文章:

java - 使用过多内存的 Hibernate 关联

c# - WCF 和 nHibernate 的并发问题

.net - Identity Server 4 和用于用户管理的 Web API

authentication - 我们可以将身份服务器 4 中的用户限制为特定应用程序吗?

SQL Server 重置所有表的标识增量

Swift 一对多关系

java - Hibernate一对多单向映射表

c# - 数据库中的任务有多个程序处理它们——如何确保每个任务都被恰好处理一次?

c# - 代码中的 nHibernate 3.2 数据库配置?

nhibernate - 使用 NHibernate 从嵌套集合返回类