与HasMany的Fluent NHibernate映射无法返回子集合

时间:2017-03-17 14:23:49

标签: c# nhibernate fluent-nhibernate nhibernate-mapping

所以我创建了一个新的简单项目来帮助朋友。 所以我创建了一个Customer类,它有一个Stuff列表

到目前为止一直很好,现在有了映射和存储关系。我按照流利的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; }
}

所有这一切都很好,当我创建一个新的Customer并使用AddStuff方法将一个或多个Stuff元素添加到集合中时,它会将事务正确地写入数据库。

然而现在奇怪的开始,当我做如下的测试

[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);
}

集合的断言失败,原因是集合的计数为0.但是,如果我调试测试并检查集合,则它包含一个元素。然而,无论如何,断言都会失败。

这个设置有什么问题?

1 个答案:

答案 0 :(得分:0)

我认为您在会话中向客户添加了新的客户和资料,但是如果不保存它们,则会刷新会话。