Visual studio 2010 Fluent NHibernate-新版本中HasMany出现错误
我将我的NHibernate升级为3.1.0.4000,将Fluent升级为1.2.0.712,但在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; }
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列名与引用列名不同时,会发生此错误