首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fluent NHibernate -新版本中的Fluent错误

Fluent NHibernate -新版本中的Fluent错误
EN

Stack Overflow用户
提问于 2012-02-17 23:56:19
回答 1查看 332关注 0票数 1

我升级了3.1.0.4000版本的NHibernate和1.2.0.712版本的Fluent,在使用HasMany时遇到了一些问题...

我的实体:

代码语言:javascript
复制
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;}
}

和地图:

代码语言:javascript
复制
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时,这个错误不会发生。有人知道这是怎么回事吗?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2012-02-18 06:56:52

发生此错误的原因是您没有设置Id属性的列名称,id的默认模式是: entityname_id。

现在在ProductMateriaPrimaMap类中,你写道:

代码语言:javascript
复制
References(c => c.MateriaPrima).Column("IdMateriaPrima")

这意味着在您的MateriaPrimaMap类中,您应该拥有列名为: IdMateriaPrima的Id,但默认情况下,您的列名为: MateriaPrima_Id。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9331425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档