2017-03-17 14 views
0

私は友人を助けるだけの新しい簡単なプロジェクトを作成しました。 私は、スタッフのリストを持っているクラスの顧客を作った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つの要素が含まれます。ただし、アサーションは失敗します。

この設定で何が問題になっていますか?

答えて

0

新しい顧客とスタッフをセッションに追加すると思いますが、セッションをフラッシュしないで保存してください。

+0

私はセッションをコミットし、フラッシュする代わりにアサーションのために新しいものを開くことを試みました。 Neighterはうまくいくように見えますが、どちらの要素も保存されているので動作しますが、アサーションのStuffの数を確認できないようです。 –

+0

.Inverse()。Cascade.AllDeleteOrphan();を変更することができます。 .Inverse()。Cascade.SaveOrUpdate()を実行します。 – eyildiz

+0

全く変わっていないことを試してみました。奇妙なことに、私はフェッチされた顧客をデバッグモードでチェックし、要素リストに要素が1つ含まれていることを確認できますが、アサーションは失敗します。 –

関連する問題