【问题标题】:Fluent NHibernate - Error with HasMany in new versionFluent NHibernate - 新版本中 HasMany 出错
【发布时间】:2012-02-17 15:56:18
【问题描述】:

我将我的 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;}
}

还有地图:

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'”}

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

【问题讨论】:

    标签: visual-studio-2010 nhibernate fluent-nhibernate


    【解决方案1】:

    发生此错误是因为您没有设置 Id 属性的列名,id 的默认模式是:entityname_id。
    现在在 ProductMateriaPrimaMap 类中你写了:

    References(c => c.MateriaPrima).Column("IdMateriaPrima")
    

    这意味着在您的 MateriaPrimaMap 类中,您应该有带有列名称的 Id:IdMateriaPrima,但默认您有名称:MateriaPrima_Id。

    我无法确切说明问题出在哪里,因为您没有显示查询。但我知道当 Id 列名与参考列名不同时会发生此错误。

    【讨论】:

      猜你喜欢
      • 2011-02-27
      • 2012-04-03
      • 2012-10-19
      • 2011-12-20
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多