流利的NHibernate多对一/一对一



我有用户和视频,我想在用户类下看到用户的视频,在视频类下看到用户的视频;我不知道如何将用户的视频填充到该用户类和视频类下的视频用户

映射>

    public UserMap()
    {
        Id(x => x.UserId);
        Map(x => x.FirstName);
        Map(x => x.LastName);
        Map(x => x.Email);
        Map(x => x.Password);
        Map(x => x.Type);
        HasMany(x => x.Videos);
    }
    public VideoMap()
    {
        Id(x => x.VideoId);
        Map(x => x.UserId);
        Map(x => x.VideoTypeId);
        Map(x => x.Status);
        Map(x => x.Image);
        HasOne(x => x.User)
    }

类>

public class User
{
    public virtual int UserId { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual string Email { get; set; }
    public virtual string Password { get; set; }
    public virtual int Type { get; set; }
    public virtual List<Video> Videos { get; set; }
}
public class Video
{
    public virtual int VideoId { get; set; }
    public virtual int UserId { get; set; }
    public virtual int VideoTypeId { get; set; }
    public virtual string Status { get; set; }
    public virtual string Image { get; set; }
    public virtual User User { get; set; }
}

方法>

    public static IList<Entities.Video.Video> All()
    {
        using (var session = NHibernateHelper.OpenSession())
        {
            IList<Entities.Video.Video> videos = session.Query<Entities.Video.Video>(
                .Where(C => C.User.UserId == C.UserId).ToList();
            return videos;
        }
    }

首先,在您的模型类中,您应该使用IList而不是List。并尝试使用映射

public UserMap()
    {
        Id(x => x.UserId);
        Map(x => x.FirstName);
        Map(x => x.LastName);
        Map(x => x.Email);
        Map(x => x.Password);
        Map(x => x.Type);
        HasMany(x => x.Videos).KeyColumn("keyColumn");
    }
public VideoMap()
{
    Id(x => x.VideoId);
    Map(x => x.UserId);
    Map(x => x.VideoTypeId);
    Map(x => x.Status);
    Map(x => x.Image);
    References(x => x.User).Column("keyColumn");
}

其中keyColumn是包含视频的表的主键。

获取用户的视频

IList<Video> videos = session.CreateCriteria(typeof(Video)).CreateAlias("User", "user").Add(Restrictions.Eq("user.UserId", id)).List<Video>().ToList();