データベースが管理するクラス自動インクリメントの整数プロパティを持つことはできますが、プライマリキー(またはNHibernateが参照するID)ではありませんか?私はこれを行う方法の例を見つけるのに苦労している。どんな助けもありがとう。ありがとう。流暢なnhibernate自動インクリメント非キー(Id)のプロパティ
答えて
2つのオプション。
データベースは、あなただけのプロパティが生成され、すべての更新/ isnertsでそれを含まないことをNHibernateはを伝える必要があり、このために100%責任がある場合。欠点は、ナショナルセミコンダクターが価値を新鮮に保つために追加選択を行う必要があることです。 =「常に」更新=「false」を挿入生成
<プロパティ名=「foo」という=「偽」/>
データベースが責任を負うものではなく、あなただけの、これは自動的にあなたができる行っているしたい場合インターセプタを使用して、挿入時に値を1に設定し、更新時に値を1増加させます。
http://www.nhforge.org/doc/nh/en/index.html#objectstate-interceptors(11.1 - インターセプタ)
あなたは、プロパティを見つけて、初期値を設定し、プロパティプロパティおよび増分を見つけるために、OnFlushDirty()を上書きするのOnSave()をオーバーライドします。
編集:
私は馬鹿だ、あなたは流暢NHibernateのは言っ気づきませんでした。
編集#2:
私はあなたにもバージョン管理として、この列を使用することに興味があるかもしれないと思いますか?
< version name="Foo" generated="always" />
これは私の作品:
public class Potato
{
public virtual Guid Id { get; protected set; }
public virtual int LegacyId { get; protected set; }
}
public class PotatoMap : ClassMap<Potato>
{
public PotatoMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.LegacyId).CustomSqlType("INT IDENTITY(1,1)").Not.Nullable().ReadOnly().Generated.Insert();
}
}
は基本的に、整数は、データベースによって生成されるように設定されており、NHibernateのは、インサート上で、それを取得するように指示されます。
マッピングが回答の半分に過ぎず、列がIDENTITYとして作成されない場合はではなく、が機能することに注意することが重要です。 CustomSqlTypeが、SchemaExportでテーブルを生成するときに適切なsqlを作成する目的で、マッピングに追加されます。これは、生成されたSQLである:他の側
create table [Potato] (
Id UNIQUEIDENTIFIER not null,
LegacyId INT IDENTITY(1,1) not null,
primary key (Id)
)
、読み取り専用およびGenerated.Insert()値のみインサート上のデータベースによって自動生成されていることをNHibernateのを教え、従ってそれのためにデータベースを照会する必要がありますすべてのインサートで値。
私はSql Serverでこれをテストしました。カスタムタイプはおそらく変更されるか、他のデータベースでは使用できないことがあります。
- 1. 流暢NHibernateはをオーバーライドIdプロパティ
- 2. 流暢NHibernateは - プロパティ
- 3. 流暢なNHibernateの自動マッピングとディスクリミネータ
- 4. 流暢NHibernateは記事のいくつかを読んだ後流暢マッピングと流暢NHibernateはで自動マッピング
- 5. 流暢なNHibernateマッピング
- 6. C#流暢なnhibernate
- 7. 流暢NHibernate;結合テーブルのプロパティ
- 8. 流暢NHibernateマップアドレスタイプ
- 9. 流暢NHibernate - 外部キーをプロパティとしてマッピングする
- 10. 動的選択流暢なnhibernate
- 11. 流暢NHibernateのマッピングヘルプ
- 12. 流暢NHibernateのマッピング
- 13. 流暢なnhibernateバッチ保存
- 14. 流暢なNhibernate無限サイクル
- 15. 流暢Nhibernate不明なパス
- 16. 流暢なnHibernateとJoinSubClasses
- 17. 流暢なNHibernate継承ベースクラス
- 18. 流暢NHibernateは:マッピング
- 19. 流暢Nhibernate Nunitテストエラー
- 20. 流暢NHibernateはAutomaping
- 21. 流暢NhibernateマッピングhasMany
- 22. (流暢)NHibernateは - クエリ
- 23. 流暢NHibernateとlog4net
- 24. 流暢なnhibernateプロパティ名のためのPrimaryKeyConvention
- 25. キーと値の列関係を持つ流暢なNHibernate
- 26. C#流暢NHibernateの質問
- 27. C++/CLIの流暢nhibernate
- 28. ローカライズのための流暢なNHibernateマッピング
- 29. 流暢なNHibernateのアーキテクチャの質問
- 30. 流暢なNHibernate - 再帰的なマップ
ほとんど同じですので心配しないでください。 Map(x => x.Foo).ReadOnly()。SetAttribute( "generated"、 "always"); SetAttributeはGenerated.Always 1.0になったときに置き換えられます。 –
最新のFNHをダウンロードしましたが、パラメータを取らない.Update()によって混乱させられました。私はそれがマッピングのように終わるのかどうかはわかりませんでした。 ReadOnly()は意味があります。 – anonymous