繁体   English   中英

具有HasMany的流畅NHibernate映射无法返回子集合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM