Fluent NHibernate在Eager Loading上返回一个项目

时间:2013-12-18 15:26:15

标签: c# nhibernate fluent-nhibernate

我对FLuent NHibernate有一点问题。 我的课程是:

public class Usuario
    {
        public virtual long IdUsuario { get; set; }
        public virtual string AdSamAccountName { get; set; }
        public virtual string Email { get; set; }
        public virtual TrabajadorWenco TrabajadorWenco { get; set; }
        public virtual IList<AsignacionProyecto> ProyectosAsignados { get; set; }
        public virtual IList<UsuarioArea> AreasUsuario { get; set; }
    }

public class Area
    {
        public virtual long IdArea { get; set; }
        public virtual string Nombre { get; set; }
        public virtual string Descripcion { get; set; }
        public virtual IList<UsuarioArea> UsuariosArea { get; set; }
        public virtual IList<Proyecto> ProyectosArea { get; set; }
    }
public class UsuarioArea
    {
        public virtual long IdUsuarioArea { get; set; }
        public virtual Usuario Usuario { get; set; }
        public virtual Area Area { get; set; }
        public virtual Rol Rol { get; set; }
    }

我的地图是:

class UsuarioMap : ClassMap<Usuario>
    {
        public UsuarioMap()
        {
            Schema("dbo");
            Table("usuario");

            Id(x => x.IdUsuario).Column("id_usuario")
                .GeneratedBy.HiLo("dbo.nh_hilo", "next_hi", "1000", @"table_name = 'usuario'");

            References(x => x.TrabajadorWenco).Column("id_trabajador_wenco").Not.LazyLoad();
            HasMany(x => x.ProyectosAsignados).KeyColumn("id_asignacion_proyecto");
            HasMany(x => x.AreasUsuario).KeyColumn("id_usuario_area").Not.LazyLoad();

            Map(x => x.AdSamAccountName).Column("ad_sam_account_name");
            Map(x => x.Email).Column("email");
        }
    }
public class UsuarioAreaMap : ClassMap<UsuarioArea>
    {
        public UsuarioAreaMap()
        {
            Schema("sgh");
            Table("usuario_area");

            Id(x => x.IdUsuarioArea).Column("id_usuario_area")
                .GeneratedBy.HiLo("dbo.nh_hilo", "next_hi", "1000", @"table_name = 'usuario_area'");

            References(x => x.Usuario).Column("id_usuario");
            References(x => x.Area).Column("id_area").Not.LazyLoad();

            Map(x => x.Rol).CustomType(typeof(Rol)).Column("id_rol");
        }
    }
public class AreaMap : ClassMap<Area>
    {
        public AreaMap()
        {
            Schema("sgh");
            Table("area");

            Id(x => x.IdArea).Column("id_area")
                .GeneratedBy.HiLo("dbo.nh_hilo", "next_hi", "1000", @"table_name = 'area'");

            HasMany(x => x.UsuariosArea).KeyColumn("id_area");
            HasMany(x => x.ProyectosArea).KeyColumn("id_area");

            Map(x => x.Nombre).Column("nombre");
            Map(x => x.Descripcion).Column("descripcion");
        }
    }

我知道在UsuarioArea表中Usuario有两条Id = 1的记录,但是当我尝试创建一个FindById时,它返回给我一个Usuario,但只有一个项目在UsuariosArea列表中。

关于为什么它只返回列表中的一个项目的任何线索?

1 个答案:

答案 0 :(得分:1)

您需要在hasmany映射

中引用您的外键

尝试将其更改为:

HasMany(x => x.AreasUsuario).KeyColumn("id_usuario").Not.LazyLoad();