0
所以我创建了一个新的简单项目,只是为了帮助一个朋友。 所以我做了一个客户,其中有一个东西列表流利的NHibernate映射与HasMany不能返回子集合
到目前为止好,现在与映射和存储关系。我就按照功能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方法将元素添加到集合中,并提交它正确写入数据库的事务。
但是现在的怪开始,当我提出类似下面的
[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。但是,如果我调试测试和检查它包含一个元素的集合。无论如何,断言失败。
那么这个设置有什么问题?
我已经尝试提交会话并为断言打开一个新的而不是只是冲洗。更好的似乎工作,或它的作品,因为这两个元素得到保存,但我似乎无法检查断言中的东西数量。 –
您可以更改.Inverse()。Cascade.AllDeleteOrphan();到.Inverse()。Cascade.SaveOrUpdate()然后。 – eyildiz
试过它根本没有改变它。奇怪的是,我可以在debugmode中检查提取的Customer,并看到Stuff列表包含一个元素,但断言失败。 –