[英]Fluent NHibernate mapping with HasMany which fails to return child collection
因此,我创建了一个新的简单项目,只是为了帮助朋友。 所以我做了一个Class Customer,里面有东西列表
到目前为止一切顺利,现在可以映射和存储关系了。 我按照流利的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。但是,如果我调试测试并检查集合,则其中包含一个元素。 无论如何,断言都会失败。
那么,此设置有什么问题呢?
我认为您在会话中向“客户”添加了新的“客户”和“东西”,但是您没有保存它们就刷新了会话。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.