流利的 Nhibernate,在一对多关系中挣扎

发布于 2024-11-29 02:33:08 字数 6459 浏览 2 评论 0原文

总是会抛出以下异常:

无法初始化集合:[FatorM.Sieq.Model.Entities.Culto.Ofertas#4][SQL: SELECT ofertas0_.Culto_Id as Culto3_1_、ofertas0_.Id as Id1_、ofertas0_.Id as Id9_0_、ofertas0_1_.Anonimo as阿诺尼莫9_0_, ofertas0_1_.Banco_Id 为 Banco3_9_0_、ofertas0_1_.Culto_Id 为 Culto4_9_0_、ofertas0_1_.Frequentador_Id 为Frequent5_9_0_、ofertas0_1_.NomeAvulso 为 NomeAvulso9_0_、ofertas0_1_.NumeroCheque 为NumeroCh7_9_0_、ofertas0_1_.Valor 为 Valor9_0_、ofertas0_.TipoOferta_Id 为 TipoOferta2_11_0_ FROM dbo.[Oferta] ofertas0_ 内部联接 dbo.[Contribuicao] ofertas0_1_ on ofertas0_.Id=ofertas0_1_.Id WHERE ofertas0_.Culto_Id=?]

其内部异常是:

列名“Culto_Id”无效。列名“Culto_Id”无效。

是的!两次...

下面有代码:

1) CultoMapping.cs:

using System;
using FluentNHibernate.Mapping;

namespace FatorM.Sieq.Model.Entities
{
    public class CultoMapping : ClassMap<Culto>
    {
        public CultoMapping()
        {
            Table("`Culto`");
            Schema("dbo");
            Id(x => x.Id)
                .GeneratedBy.Identity();
            OptimisticLock.Version();
            Not.LazyLoad();
            Map(x => x.DataCulto);
            Map(x => x.Frequentador_Id_Tesoureiro, "Frequentador_Id_Tesoureiro")
                .Not.Insert()
                .Not.Update();
            Map(x => x.Igreja_Id, "Igreja_Id")
                .Not.Insert()
                .Not.Update();
            Map(x => x.NumeroBatizados);
            Map(x => x.NumeroCulto);
            Map(x => x.NumeroPresentes);
            Map(x => x.NumeroVisitantes);
            Map(x => x.Pastor_Id, "Pastor_Id")
                .Not.Insert()
                .Not.Update();
            Map(x => x.TotalCongregacoes);
            Map(x => x.TotalDizimos);
            Map(x => x.TotalMissoes);
            Map(x => x.TotalOfertasEspeciais);
            Map(x => x.TotalOfertasGeral);
            Map(x => x.TotalOutrasEntradas);
            HasMany(x => x.Dizimos)
                .KeyColumn("Culto_Id")
                .Inverse()
                .Cascade.All()
                .Fetch.Select().Not.LazyLoad()
                .AsBag();
            HasMany(x => x.Ofertas)
                .KeyColumn("Culto_Id")
                .Inverse()
                .Cascade.All()
                .Fetch.Select().Not.LazyLoad()
                .AsBag();
            HasManyToMany(x => x.Diaconos)
                .ChildKeyColumn("Frequentador_Id")
                .ParentKeyColumn("Culto_Id")
                .Cascade.All()
                .Table("CultoDiacono")
                .Fetch.Select().Not.LazyLoad()
                .AsBag();
            References(x => x.Tesoureiro)
                .Class(typeof(Frequentador))
                .Not.Nullable() 
                .Column("Frequentador_Id_Tesoureiro")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
            References(x => x.Igreja)
                .Class(typeof(Igreja))
                .Not.Nullable() 
                .Column("Igreja_Id")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
            References(x => x.Pastor)
                .Class(typeof(Pastor))
                .Not.Nullable() 
                .Column("Pastor_Id")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
        }
    }
}

2) OfertaMapping.cs:

    using System;
    using FluentNHibernate.Mapping;

    namespace FatorM.Sieq.Model.Entities
    {
        public class OfertaMapping : SubclassMap<Oferta>
        {
            public OfertaMapping()
            {
                Table("`Oferta`");
                Schema("dbo");
                KeyColumn("Id");
                Not.LazyLoad();
                Map(x => x.TipoOferta_Id, "TipoOferta_Id")
                    .Not.Insert()
                    .Not.Update();
                References(x => x.TipoOferta)
                    .Class(typeof(TipoOferta))
                    .Not.Nullable()
                    .Column("TipoOferta_Id")
                    .Fetch.Select().Not.LazyLoad()
                    .Cascade.All();
            }
        }
    }

3) DizimoMapping.cs:

using System;
using FluentNHibernate.Mapping;

namespace FatorM.Sieq.Model.Entities
{
    public class DizimoMapping : SubclassMap<Dizimo>
    {
        public DizimoMapping()
        {
            Table("`Dizimo`");
            Schema("dbo");
            KeyColumn("Id");
            Not.LazyLoad();
            Map(x => x.AnoReferencia);
            Map(x => x.MesReferencia);
        }
    }
}

4) ContribuicaoMapping.cs:

using System;
using FluentNHibernate.Mapping;

namespace FatorM.Sieq.Model.Entities
{
    public class ContribuicaoMapping : ClassMap<Contribuicao>
    {
        public ContribuicaoMapping()
        {
            Table("`Contribuicao`");
            Schema("dbo");
            Id(x => x.Id)
                .GeneratedBy.Identity();
            OptimisticLock.Version();
            Not.LazyLoad();
            Map(x => x.Anonimo);
            Map(x => x.Banco_Id, "Banco_Id")
                .Not.Insert()
                .Not.Update();
            Map(x => x.Culto_Id, "Culto_Id")
                .Not.Insert()
                .Not.Update();
            Map(x => x.Frequentador_Id, "Frequentador_Id")
                .Not.Insert()
                .Not.Update();
            Map(x => x.NomeAvulso);
            Map(x => x.NumeroCheque);
            Map(x => x.Valor);
            References(x => x.Banco)
                .Class(typeof(Banco))   
                .Column("Banco_Id")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
            References(x => x.Culto)
                .Class(typeof(Culto))
                .Not.Nullable() 
                .Column("Culto_Id")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
            References(x => x.Frequentador)
                .Class(typeof(Frequentador))    
                .Column("Frequentador_Id")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
        }
    }
}

Oferta 和 Dizimo 从 Contribuicao 扩展。

The follow exception is always be throwed:

could not initialize a collection: [FatorM.Sieq.Model.Entities.Culto.Ofertas#4][SQL: SELECT ofertas0_.Culto_Id as Culto3_1_, ofertas0_.Id as Id1_, ofertas0_.Id as Id9_0_, ofertas0_1_.Anonimo as Anonimo9_0_, ofertas0_1_.Banco_Id as Banco3_9_0_, ofertas0_1_.Culto_Id as Culto4_9_0_, ofertas0_1_.Frequentador_Id as Frequent5_9_0_, ofertas0_1_.NomeAvulso as NomeAvulso9_0_, ofertas0_1_.NumeroCheque as NumeroCh7_9_0_, ofertas0_1_.Valor as Valor9_0_, ofertas0_.TipoOferta_Id as TipoOferta2_11_0_ FROM dbo.[Oferta] ofertas0_ inner join dbo.[Contribuicao] ofertas0_1_ on ofertas0_.Id=ofertas0_1_.Id WHERE ofertas0_.Culto_Id=?]

It inner exception is:

Invalid column name 'Culto_Id'. Invalid column name 'Culto_Id'.

Yes! twice...

Down here has the code:

1) CultoMapping.cs:

using System;
using FluentNHibernate.Mapping;

namespace FatorM.Sieq.Model.Entities
{
    public class CultoMapping : ClassMap<Culto>
    {
        public CultoMapping()
        {
            Table("`Culto`");
            Schema("dbo");
            Id(x => x.Id)
                .GeneratedBy.Identity();
            OptimisticLock.Version();
            Not.LazyLoad();
            Map(x => x.DataCulto);
            Map(x => x.Frequentador_Id_Tesoureiro, "Frequentador_Id_Tesoureiro")
                .Not.Insert()
                .Not.Update();
            Map(x => x.Igreja_Id, "Igreja_Id")
                .Not.Insert()
                .Not.Update();
            Map(x => x.NumeroBatizados);
            Map(x => x.NumeroCulto);
            Map(x => x.NumeroPresentes);
            Map(x => x.NumeroVisitantes);
            Map(x => x.Pastor_Id, "Pastor_Id")
                .Not.Insert()
                .Not.Update();
            Map(x => x.TotalCongregacoes);
            Map(x => x.TotalDizimos);
            Map(x => x.TotalMissoes);
            Map(x => x.TotalOfertasEspeciais);
            Map(x => x.TotalOfertasGeral);
            Map(x => x.TotalOutrasEntradas);
            HasMany(x => x.Dizimos)
                .KeyColumn("Culto_Id")
                .Inverse()
                .Cascade.All()
                .Fetch.Select().Not.LazyLoad()
                .AsBag();
            HasMany(x => x.Ofertas)
                .KeyColumn("Culto_Id")
                .Inverse()
                .Cascade.All()
                .Fetch.Select().Not.LazyLoad()
                .AsBag();
            HasManyToMany(x => x.Diaconos)
                .ChildKeyColumn("Frequentador_Id")
                .ParentKeyColumn("Culto_Id")
                .Cascade.All()
                .Table("CultoDiacono")
                .Fetch.Select().Not.LazyLoad()
                .AsBag();
            References(x => x.Tesoureiro)
                .Class(typeof(Frequentador))
                .Not.Nullable() 
                .Column("Frequentador_Id_Tesoureiro")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
            References(x => x.Igreja)
                .Class(typeof(Igreja))
                .Not.Nullable() 
                .Column("Igreja_Id")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
            References(x => x.Pastor)
                .Class(typeof(Pastor))
                .Not.Nullable() 
                .Column("Pastor_Id")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
        }
    }
}

2) OfertaMapping.cs:

    using System;
    using FluentNHibernate.Mapping;

    namespace FatorM.Sieq.Model.Entities
    {
        public class OfertaMapping : SubclassMap<Oferta>
        {
            public OfertaMapping()
            {
                Table("`Oferta`");
                Schema("dbo");
                KeyColumn("Id");
                Not.LazyLoad();
                Map(x => x.TipoOferta_Id, "TipoOferta_Id")
                    .Not.Insert()
                    .Not.Update();
                References(x => x.TipoOferta)
                    .Class(typeof(TipoOferta))
                    .Not.Nullable()
                    .Column("TipoOferta_Id")
                    .Fetch.Select().Not.LazyLoad()
                    .Cascade.All();
            }
        }
    }

3) DizimoMapping.cs:

using System;
using FluentNHibernate.Mapping;

namespace FatorM.Sieq.Model.Entities
{
    public class DizimoMapping : SubclassMap<Dizimo>
    {
        public DizimoMapping()
        {
            Table("`Dizimo`");
            Schema("dbo");
            KeyColumn("Id");
            Not.LazyLoad();
            Map(x => x.AnoReferencia);
            Map(x => x.MesReferencia);
        }
    }
}

4) ContribuicaoMapping.cs:

using System;
using FluentNHibernate.Mapping;

namespace FatorM.Sieq.Model.Entities
{
    public class ContribuicaoMapping : ClassMap<Contribuicao>
    {
        public ContribuicaoMapping()
        {
            Table("`Contribuicao`");
            Schema("dbo");
            Id(x => x.Id)
                .GeneratedBy.Identity();
            OptimisticLock.Version();
            Not.LazyLoad();
            Map(x => x.Anonimo);
            Map(x => x.Banco_Id, "Banco_Id")
                .Not.Insert()
                .Not.Update();
            Map(x => x.Culto_Id, "Culto_Id")
                .Not.Insert()
                .Not.Update();
            Map(x => x.Frequentador_Id, "Frequentador_Id")
                .Not.Insert()
                .Not.Update();
            Map(x => x.NomeAvulso);
            Map(x => x.NumeroCheque);
            Map(x => x.Valor);
            References(x => x.Banco)
                .Class(typeof(Banco))   
                .Column("Banco_Id")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
            References(x => x.Culto)
                .Class(typeof(Culto))
                .Not.Nullable() 
                .Column("Culto_Id")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
            References(x => x.Frequentador)
                .Class(typeof(Frequentador))    
                .Column("Frequentador_Id")
                .Fetch.Select().Not.LazyLoad()
                .Cascade.SaveUpdate();
        }
    }
}

Oferta and Dizimo extends from Contribuicao.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灵芸 2024-12-06 02:33:08

以下更改:

Table("`Contribuicao`"); 

请尝试在您的代码中对 Table("Contribuicao"); 进行

并在所有 Table 定义中进行更改。

Please try in your code the following change:

Table("`Contribuicao`"); 

for Table("Contribuicao");

and make that in all Table definitions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文