多个hasmany相同的keycolumn - 非法访问加载集合

时间:2011-11-17 09:23:50

标签: nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

它有效。提取数据,但出现此错误:非法访问加载集合

 public class Image : File
    {
        public virtual string ImagePath { get; set; }
    }

    public class Video : File
    {
        public virtual string VideoPath { get; set; }
        public virtual string VideoType { get; set; }
    }


   public class Service : ContentBase
    {
        public virtual IList<Image> Images { get; set; }
        public virtual IList<Video> Videos { get; set; }
    }



   public class ServiceMap:SubclassMap<Domain.Service>
    {
        public ServiceMap()
        {
            DiscriminatorValue("Service");

            HasMany(x => x.Images).KeyColumn("ContentBase");
            HasMany(x => x.Videos).KeyColumn("ContentBase");
        }
    }

public class ImageMap:SubclassMap<Image>
    {
        public ImageMap()
        {
            DiscriminatorValue("Image");

            Map(x => x.ImagePath);
        }
    }

 public class VideoMap:SubclassMap<Video>
    {
        public VideoMap()
        {
            DiscriminatorValue("Video");

            Map(x => x.VideoPath);
        }
    }

它有效。但是当我查询它时会出现此错误。我认为相同的“keycolumn”会给出这个错误。 mapping'i我该怎么办?

1 个答案:

答案 0 :(得分:0)

你知道joinalias不会加载收藏品吗?这就是Fetch的用途。试试这个

var service = UnitOfWork.CurrentSession.QueryOver<Service>()
    .Fetch(x => x.Images).Eager
    .Fetch(x => x.Videos).Eager
    .Where(x => x.Id == serviceId)
    .SingleOrDefault();

更新

时,可能会抛出非法访问加载集合
    访问未初始化的集合时
  • 会话已关闭
  • 映射和集合类型不匹配
  • 数据库不匹配

您是否检查过生成的sql,以查看NH是否尝试访问错误表上的不存在的列或列?