0

它的工作原理。提取數據,但給出了這樣的錯誤:到裝填回收多個hasmany相同的keycolumn - 非法訪問加載收集

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我應該怎麼做?

+0

視頻和圖像的映射怎麼樣? – Firo

+0

代碼加起來:) –

+0

var service = UnitOfWork.CurrentSession.QueryOver () .JoinAlias(x => x.ThumbImage,()=> thumbImage) .JoinAlias(x => x.MainImage, ()=> mainImage) .Where(x => x.Id == serviceId) .SingleOrDefault(); –

回答

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是否嘗試訪問錯誤的表上不存在的列或列?

+0

不正確,JoinAlias會感染熱切地獲取數據。 – Phill

+0

真的嗎?我似乎不能得到NH 3.1這樣做。它會加入孩子,但不會初始化該集合,因爲也許您正在過濾別名,然後並非所有孩子的集合將在那裏初始化 – Firo

+0

thumbimage和mainImage不同的item.my項目 - >視頻和圖像 –