Nhibernate不更新对象ID

时间:2012-07-01 20:34:31

标签: c# nhibernate fluent-nhibernate

我有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时,这是否有任何属性插入数据库?

1 个答案:

答案 0 :(得分:4)

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

  1. 您正在使用身份识别生成器;这意味着您允许数据​​库在插入实体时生成实体ID。这种方法是not recommended。我建议使用HiLo作为你的id生成器。但是,如果坚持使用标识,则应确保相应地配置了数据库。

  2. 建议always use transactions而不是明确调用Flush

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