C# Fluent NHibernate HasManyToMany仅在首次加载时工作

C# Fluent NHibernate HasManyToMany仅在首次加载时工作,c#,asp.net-mvc,nhibernate,fluent-nhibernate,C#,Asp.net Mvc,Nhibernate,Fluent Nhibernate,这对我来说是个奇怪的问题。我有一个简单的领域与2个实体公司和承运人。它们通过另一个表具有m:m关系 我这样设置了我的Fluent映射 public partial class Carrier { public virtual int ID { get; set; } public virtual string Name { get; set; } public virtual IList<Company> Companies { ge

这对我来说是个奇怪的问题。我有一个简单的领域与2个实体公司和承运人。它们通过另一个表具有m:m关系

我这样设置了我的Fluent映射

 public partial class Carrier {
        public virtual int ID { get; set; }
        public virtual string Name { get; set; }
        public virtual IList<Company> Companies { get; set; }
 }

  public class CarrierMap : ClassMap<Carrier> {
        public CarrierMap() {
            Id(x => x.ID);
            Map(x => x.Name);
            HasManyToMany(x => x.Companies)
                .Table("CompanyCarrier");
        }
  }

  public partial class Company {
        public virtual int ID { get; set; }
        public virtual string CompanyName { get; set; }
 }

    public class CompanyMap : ClassMap<Company> {
        public CompanyMap() {
            Id(x => x.ID);
            Map(x => x.CompanyName);
        }
    }
逐步通过调试器并深入挖掘我得到:

PropertyAccessException
Exception occurred getter of CCMvc.Core.Entities.Company.ID
此外,如果我反转映射,在公司实体上放置一个IList Carriers,并尝试通过一个Carrier获得一个过滤过的公司列表,它每次都会工作,但我不知道为什么。表或绑定它们的m:m表都没有什么特别之处


救命啊

异常可能意味着NHibernate试图通过反射访问Company.ID,但Company对象为null,因此“需要一个目标”——目标为null

我说不出原因。但是我可以看到你用Linq来代替NHibernate。我还多次从它那里得到空引用。我刚切换到HQL,从来没有困扰,因为我可以很容易地测试我的查询,我仍然认为LINQ到NHiBiNIT有点“未完成”。 例如,尝试重写Linq

从t in_session.Linq()返回 从c到t公司 其中c==公司选择t


也许它不喜欢它。或者只使用HQL/ICriteria。

这可能是另一种情况的一部分,但在过去使用fluent映射时,我曾多次遇到这个错误

public CarrierMap() {
        Id(x => x.ID);
        Map(x => x.Name);
        HasManyToMany(x => x.Companies)
            .Table("CompanyCarrier")
            .LazyLoad();
    }

将LazyLoad()添加到映射的末尾,这为我的个人项目清除了障碍。

Gah!我发现,通过一些其他代码,我最终向查询传递了一个空值,因此崩溃了。谢谢大家的帮助

但这仍然不能解释为什么它在第一次被击中时就起作用。我尝试了您的示例,但出现了一个错误:无法解析属性:c of:CCMvc.Core.Entities.Carrier我对linq还是有点陌生,所以我真的不知道如何解决这个问题。
PropertyAccessException
Exception occurred getter of CCMvc.Core.Entities.Company.ID
public CarrierMap() {
        Id(x => x.ID);
        Map(x => x.Name);
        HasManyToMany(x => x.Companies)
            .Table("CompanyCarrier")
            .LazyLoad();
    }