Visual studio 2010 Fluent NHibernate-新版本中HasMany出现错误

Visual studio 2010 Fluent NHibernate-新版本中HasMany出现错误,visual-studio-2010,nhibernate,fluent-nhibernate,Visual Studio 2010,Nhibernate,Fluent Nhibernate,我将我的NHibernate升级为3.1.0.4000,将Fluent升级为1.2.0.712,但在HasMany方面存在一些问题 我的实体: public class MateriaPrima { public virtual int Id { get; set; } public virtual string Description { get; set; } public virtual DateTime Date { get; set; }

我将我的NHibernate升级为3.1.0.4000,将Fluent升级为1.2.0.712,但在HasMany方面存在一些问题

我的实体:

public class MateriaPrima
{
        public virtual int Id { get; set; }
        public virtual string Description { get; set; }
        public virtual DateTime Date { get; set; }
        public virtual decimal Price { get; set; }
}

public class Product
    {
        public virtual int Id { get; set; }
        public virtual IList<ProductMateriaPrima> ListMateriaPrima { get; set; }
        public virtual string Description { get; set; }
        public virtual decimal Price { get; set; }
        public virtual DateTime Date { get; set; }

        public Product()
        {
            this.ListaMateriaPrima = new List<ProductMateriaPrima>();
        } 
}

public class ProductMateriaPrima
{
    public virtual int Id { get; set; }
    public virtual Product Product {get;set;}
    public virtual MateriaPrima MateriaPrima { get; set; }
    public virtual decimal PrecoCusto {get;set;}
}
公共类材料
{
公共虚拟整数Id{get;set;}
公共虚拟字符串描述{get;set;}
公共虚拟日期时间日期{get;set;}
公共虚拟十进制价格{get;set;}
}
公共类产品
{
公共虚拟整数Id{get;set;}
公共虚拟IList ListMaterialMap{get;set;}
公共虚拟字符串描述{get;set;}
公共虚拟十进制价格{get;set;}
公共虚拟日期时间日期{get;set;}
公共产品()
{
this.listaMaterialAprima=新列表();
} 
}
公共类产品
{
公共虚拟整数Id{get;set;}
公共虚拟产品产品{get;set;}
公共虚拟MaterialAprima MaterialAprima{get;set;}
公共虚拟十进制预客户{get;set;}
}
和地图:

public class MateriaPrimaMap : ClassMap<MateriaPrima>
{
    public MateriaPrimaMap()
    {
        Id(m => m.Id).Length(11).Not.Nullable();
        Map(m => m.Description).Length(90).Not.Nullable();
        Map(m => m.Date).Not.Nullable();
        Map(m => m.Price).Not.Nullable();
    }
}

public class ProductMateriaPrimaMap : ClassMap<ProductoMateriaPrima>
    {
        public ProductMateriaPrimaMap()
        {
            Id(c => c.Id).Length(11);
            Map(c => c.Price).Not.Nullable();

            References(c => c.MateriaPrima).Column("IdMateriaPrima").Not.LazyLoad();
            References(c => c.Product).Column("IdProduct").Not.LazyLoad();
        }
    }

public class ProdutoMap : ClassMap<Produto>
    {
        public ProdutoMap()
        {
            Id(m => m.Id).Length(11).Not.Nullable();
            Map(m => m.Description).Length(90).Not.Nullable();
            Map(m => m.Price).Length(10);
            Map(m => m.Date).Length(12);
            Map(m => m.Active).Not.Nullable();

            HasMany(x => x.ListaMateriaPrima)
                    .Table("ProdutoMateriaPrima")
                    .KeyColumn("IdProduto")
                    .KeyColumn("IdMateriaPrima")
                    .Inverse()
                    .Cascade.AllDeleteOrphan();
        }
    }
公共类MaterialMap:ClassMap
{
公共材料
{
Id(m=>m.Id).Length(11).Not.Nullable();
Map(m=>m.Description).Length(90).Not.Nullable();
Map(m=>m.Date).Not.Nullable();
Map(m=>m.Price).Not.Nullable();
}
}
公共类ProductMaterialAprimaMap:ClassMap
{
公共产品材料APRIMAMAP()
{
长度(11);
Map(c=>c.Price).Not.Nullable();
引用(c=>c.materialaprima).Column(“idmaterialaprima”).Not.LazyLoad();
引用(c=>c.Product).Column(“IdProduct”).Not.LazyLoad();
}
}
公共类ProdutoMap:ClassMap
{
公共ProdutoMap()
{
Id(m=>m.Id).Length(11).Not.Nullable();
Map(m=>m.Description).Length(90).Not.Nullable();
地图(m=>m.Price)。长度(10);
地图(m=>m.Date)。长度(12);
Map(m=>m.Active).Not.Nullable();
HasMany(x=>x.ListaMateriaPrima)
.表(“生产材料”)
.KeyColumn(“IdProduto”)
.KeyColumn(“IDMaterialAprima”)
.Inverse()
.Cascade.AllDeleteOrphan();
}
}
当我尝试搜索时,我得到了错误:{“字段列表”中的“未知列”listamater0.materialaprima\u id}

当我使用旧版本的Nhibernate和Fluent时,这个错误不会发生。。。 有人知道发生了什么吗?
感谢您的帮助……

发生此错误是因为您没有设置Id属性的名称,Id的默认模式是:entityname\u Id。
现在在ProductMaterialAprimaMap类中,您编写了:

References(c => c.MateriaPrima).Column("IdMateriaPrima")
这意味着在MaterialAprimaMap类中,您应该具有名称为IDMaterialAprima的Id,但默认情况下,您的名称为:MaterialAprima_Id


我不能说问题到底出在哪里,因为您没有显示查询。但我知道,当Id列名与引用列名不同时,会发生此错误。

发生此错误是因为您没有设置Id属性的名称,Id的默认模式是:entityname\u Id。
现在在ProductMaterialAprimaMap类中,您编写了:

References(c => c.MateriaPrima).Column("IdMateriaPrima")
这意味着在MaterialAprimaMap类中,您应该具有名称为IDMaterialAprima的Id,但默认情况下,您的名称为:MaterialAprima_Id

我不能说问题到底出在哪里,因为您没有显示查询。但我知道,当Id列名与引用列名不同时,会发生此错误