5

これに対する答えを見つけるのにしばらく時間がかかったので、私は愛を共有したいと思いました。


SQL ServerでコードによるNHibernateの新しいマッピングを使用すると、エンティティを保存できません。エンティティを保存すると、System.Data.SqlClient.SqlExceptionがスローされ、次のメッセージが表示されます(テーブル名を除く)。

「IDENTITY_INSERTがOFFに設定されている場合、テーブル「DietUser」にID列の明示的な値を挿入できません。」

私のテーブルはIDIDを使用しており、エンティティとマッピングは次のようになります。

public class User
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Username { get; set; }
    public virtual string Password { get; set; }
    public virtual short DailyPoints { get; set; }
}

public class UserMapping : ClassMapping<User>
{
    public UserMapping()
    {
        Id(x => x.Id);
        Property(x => x.Name);
        Property(x => x.Username);
        Property(x => x.Password);
        Property(x => x.DailyPoints);
    }
}

XMLマッピングを使用してこれをマッピングする方法は知っていますが、可能であれば、コードによる組み込みのマッピングを使用したいと思います。

4

3 に答える 3

10

フォーラムを掘り下げた後、私は幸運に恵まれ、これをマッピングする方法を見つけました。Fabioが提供する例は、IDなどにGUIDを使用する場合に最適ですが、ID IDを使用する場合(他の多くのIDも参照)、使用しているジェネレーターを指定する必要があります。使用する予定です。動作する更新されたマッピングは次のとおりです。

public class UserMapping : ClassMapping<User>
{
    public UserMapping()
    {
        Id(x => x.Id, map => map.Generator(Generators.Identity));
        Property(x => x.Name);
        Property(x => x.Username);
        Property(x => x.Password);
        Property(x => x.DailyPoints);
    }
}
于 2011-09-02T15:12:17.673 に答える
1

ID ID について言えば、 を設定generator=identityするNHibernateと、バッチ挿入を実行できなくなります。これは、データベースによって生成されたこの血まみれの ID を取得するために追加の要求が必要になるためです。

于 2012-04-06T09:41:54.563 に答える
0

エンティティを永続化する前に Id プロパティに値を割り当てようとしていますか? データベースへの変更を永続化しようとしているコードを追加できますか?

NHibernate の学習を開始するときに、開始例に従って小さなデモを作成しました。ここにあります。それが役立つことを願っています。

于 2011-09-02T14:40:58.927 に答える