0

有用。拉取数据,但报此错误:非法访问加载集合

 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 我该怎么办?

4

1 回答 1

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 是否尝试访问不存在的列或错误表上的列?

于 2011-11-18T14:44:44.797 回答