私は友人を助けるだけの新しい簡単なプロジェクトを作成しました。 私は、スタッフのリストを持っているクラスの顧客を作ったHasManyを使ったFluent NHibernateマッピングが子コレクションを返さない
これまでのところ、リレーションシップをマッピングして保存することができました。私は流暢NHibernateはクラスマップに従ってマッピングするために行って、次の
public class CustomerMap : ClassMap<Customer> {
Id(p => p.Id).GenerateBy.Guid();
HasMany(p => p.Stuff).Access.CamelCaseField().KeyColumn("Id").Inverse().Cascade.AllDeleteOrphan();
}
public class StuffMap : ClassMap<Stuff> {
Id(p => p.Id).GeneratedBy.Guid();
Reference(p => p.Customer).Column("CustomerId).Not.Nullable();
}
をし、私のクラスになってしまった
public class Customer {
private ISet<Stuff> stuff = new HashSet<Stuff>()
public virtual IEnumerable<Stuff> Stuff => stuff;
public void AddStuff(Stuff newstuff) {
newstuff.Customer = this;
stuff.Add(stuff);
}
}
public class Stuff {
public virtual Customer Customer { get; set; }
}
すべてこれは良い作品と私は新しい顧客を作成し、より多くのものを追加するときメソッドAddStuffを使用して要素をコレクションに入れ、正しく書き込まれたトランザクションをデータベースにコミットします。私はコレクションの主張は、私がテストしてチェックをデバッグする場合は、コレクションのカウントは0です。ただしという理由で失敗したテスト以下
[TestMethod]
public void TestStuffAndCustomer() {
var customer = session.Add(new Customer());
customer.AddStuff(new Stuff());
session.Flush();
var customer = session.Query<Customer>().Single();
customer.Stuff.Should().HaveCount(1);
}
のように作るとき
しかし今奇妙で、始まりますコレクションには1つの要素が含まれます。ただし、アサーションは失敗します。
この設定で何が問題になっていますか?
私はセッションをコミットし、フラッシュする代わりにアサーションのために新しいものを開くことを試みました。 Neighterはうまくいくように見えますが、どちらの要素も保存されているので動作しますが、アサーションのStuffの数を確認できないようです。 –
.Inverse()。Cascade.AllDeleteOrphan();を変更することができます。 .Inverse()。Cascade.SaveOrUpdate()を実行します。 – eyildiz
全く変わっていないことを試してみました。奇妙なことに、私はフェッチされた顧客をデバッグモードでチェックし、要素リストに要素が1つ含まれていることを確認できますが、アサーションは失敗します。 –