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 がコレクションをeagerloadしないことを知っていますか? それがフェッチの目的です。代わりにこれを試してください

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 に答える