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でした。しかし、再起動すると、問題は解消されました。

私は他のクラスと少し同じ問題を抱えています。これは、私が呼び出すときにデータベースに挿入されるプロパティSaveですか?

4

1 に答える 1

4

あなたの説明から何が問題なのかは 100% わかりませんが、あなたが投稿したコードに基づいていくつかの指針を示すことができると思います:

  1. ID ID ジェネレーターを使用しています。つまり、エンティティを挿入すると、データベースがエンティティの ID を生成できるようになります。この方法はお勧めしません。HiLo を ID ジェネレーターとして使用することをお勧めします。ただし、アイデンティティに固執する場合は、データベースがそれに応じて構成されていることを確認する必要があります。

  2. を明示的に呼び出すのではなく、常にトランザクションを使用することをお勧めしFlushます。

これらの提案が役に立たない場合は、問題についてさらに詳しく説明することをお勧めします-何が表示されていますか (オブジェクトはデータベースに保存されていますか? ID は常に 0 を返しますか?)

于 2012-07-01T21:40:39.863 に答える