次のようなクラスモデルがあります。
public class TheSystem
{
public virtual Guid Id { get; protected set; }
public virtual ICollection<User> Users { get; protected set; }
}
public class User
{
public virtual Guid Id { get; protected set; }
public virtual string Username { get; set; }
...
}
マッピング
public class TheSystemMap : ClassMap<TheSystem>
{
public TheSystemMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
HasMany(x => x.Users).Cascade.AllDeleteOrphan().ExtraLazyLoad().Cache.ReadWrite().IncludeNonLazy();
Cache.ReadOnly();
}
}
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Username).Not.Nullable();
...
Cache.ReadOnly();
}
}
システムに新しいユーザーを追加したいときに問題が発生します。コレクションを参照しているためUsers
、NHibernate はすべてのインスタンスをロードします (1 人のユーザーを挿入したいだけなので、これは望ましくありません)。
...
theSystem.Users.Add(new User("aUser"));
...
ExtraLazyLoad()
アイテムの数を取得しようとすると、オプションは期待どおりに機能します (次のコードは、数のみを照会するために生成されます)
...
var count = theSystem.Users.Count;
...
.AsBag()
同じ結果でオプションを追加しようとしました。
マッピングに欠けているものがありますか、それとも通常の方法では解決できない状況ですか?