0

我对 NHibernate 有问题,有时它不会更新 ID 属性

用户地图类

public class SfGuardUserMap : ClassMap<User> {

    public SfGuardUserMap() {
        Table("sf_guard_user");
        LazyLoad();
        Id(x => x.Id).GeneratedBy.Identity().Column("id");
        Map(x => x.FirstName).Column("first_name");
        Map(x => x.LastName).Column("last_name");
        Map(x => x.EmailAddress).Column("email_address").Not.Nullable();
        Map(x => x.Sex).Column("sex").Not.Nullable();
        Map(x => x.Lang).Column("lang");
        Map(x => x.City).Column("city");

可执行代码

var user = new User
                       {
                           FirstName = usr.FirstName,
                           EmailAddress = usr.Email,
                           LastName = usr.LastName,
                           Sex = usr.Sex,
                           Birthdate = usr.Birthday,
                           IsActive = User.IS_ACTIVE_ACTIVE
                       };
        var t = (int)session.Save(user);
        session.Flush();

我遇到了问题,user.Id 始终为 0。但是当我重新启动 iis 时,我的问题就消失了。

我对其他班级也有同样的问题。这是我打电话时向数据库插入的任何属性Save吗?

4

1 回答 1

4

根据您的描述,我不是 100% 确定问题是什么,但我相信我可以根据您发布的代码给出一些指示:

  1. 您正在使用身份 ID 生成器;这意味着您允许您的数据库在您插入实体时生成它们的 ID。不推荐这种方法。我建议使用 HiLo 作为您的 id 生成器。但是,如果您坚持使用身份,则应确保您的数据库已进行相应配置。

  2. 建议始终使用事务而不是显式调用Flush.

如果这些建议对您没有帮助,我建议您详细说明您的问题 - 您看到了什么(对象是否保存在数据库中?返回的 id 是否始终为 0?)

于 2012-07-01T21:40:39.863 回答