我升级了3.1.0.4000版本的NHibernate和1.2.0.712版本的Fluent,在使用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;}
}和地图:
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();
}
}当我尝试搜索时,我得到了错误:{“未知的列'listamater0_.MateriaPrima_id‘in 'field list'"}
当我使用旧版本的Nhibernate和Fluent时,这个错误不会发生。有人知道这是怎么回事吗?谢谢你的帮助。
发布于 2012-02-18 06:56:52
发生此错误的原因是您没有设置Id属性的列名称,id的默认模式是: entityname_id。
现在在ProductMateriaPrimaMap类中,你写道:
References(c => c.MateriaPrima).Column("IdMateriaPrima")这意味着在您的MateriaPrimaMap类中,您应该拥有列名为: IdMateriaPrima的Id,但默认情况下,您的列名为: MateriaPrima_Id。
我不能确切地说出问题出在哪里,因为您没有显示查询。但我知道当Id列名与引用列名不同时,就会发生这个错误。
https://stackoverflow.com/questions/9331425
复制相似问题