gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:12:26 25 4
gpt4 key购买 nike

我在用户和 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com