FluentNHibernateには、object
のIDを持つドメインオブジェクトがあります。このオブジェクトは常にint
(さらに推論すると以下のとおりです)です。今私はSQLiteのバックエンドを持っています。 Idを自動インクリメントとしてマップしたい。これまでのところ、私が持っている:私はNative
を呼び出すときオブジェクト識別子をint型としてマッピングする
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("Users");
Id(x => x.Id).CustomType<int>().GeneratedBy.Native();
Map(x => x.Email);
}
}
public class User
{
public virtual object Id { get; set; }
public virtual string Email { get; set; }
}
をしかし、マップがロードされているとき、それはUser.Id
財産(スタックトレースのためのメッセージIdentity type must be integral (int, long, uint, ulong)
とFluentConfigurationException
を投げると言う起こる繰り返しますが、私は実際には自動にしたいです。 -increment整数。
推論オブジェクトのID
私たちがそうしてくださいだけでFO、私はすでに、これは悪い考えであることを十分認識しています。いくつかのRDBMSのと同様にMongoDBのをサポートするために、ビジネス要件を持っていますクスは質問に。 MongoはObjectId(Guidのようなやや連続した値型)をデフォルトのID型として使用します。考え方は、実際のIDタイプを(データレイヤに依存するため)隠すことですが、モデルを再利用し、2つの異なるデータアクセス実装を持ちます(Mongo & NHibernate)。
いいえ、同じエラー – kelloti
「Idプロパティを削除する」とはどういう意味ですか?私はまだIDが必要ですが、パブリックゲッターを持つ必要はありません... – kelloti
私は今 'Id(x => x.Id).CustomType().GeneratedBy.Custom () 'これは以前のエラーを過ぎています。代わりに 'StaleStateException'を得る:"行が別のトランザクションによって更新または削除された(または保存されていない値のマッピングが間違っていた) "。なぜ、 'Insert'の代わりに' Update'をしようとしていますか? –
kelloti