流畅的NHibernate列表<t>在类</t>中

时间:2013-01-15 22:21:19

标签: c# orm fluent-nhibernate mapping

我正在尝试获取List<User>,而List<Article>又包含User List<User>,但是在查询时,我会获得UserUser List<Article> (唯一的 public class User { public virtual int UserId { get; set; } public virtual string Name { get; set; } public virtual string Password { get; set; } public virtual IList<Article> Articles { get; set; } public User() { Articles = new List<Article>(); } } public class Article { public virtual int ArticleId { get; set; } public virtual string Title { get; set; } public virtual string Ingress { get; set; } public virtual DateTime Created { get; set; } public virtual string ArticleText { get; set; } public virtual User Author { get; set; } } )有一个 public class UserMap : ClassMap<User> { public UserMap() { Id(x => x.UserId); Map(x => x.Name); Map(x => x.Password); HasMany(x => x.Articles).KeyColumn("UserId").LazyLoad(); } } public class ArticleMap : ClassMap<Article> { public ArticleMap() { Id(x => x.ArticleId); Map(x => x.Title); Map(x => x.Ingress); Map(x => x.Created); References(x => x.Author).Column("UserId").LazyLoad(); Map(x => x.ArticleText).Length(4001); } } ,但它不包含任何内容。

我已经检查了我的数据库并且密钥匹配,所以我的猜测(好吧,不是很多猜测)是我的映射中存在一些问题。我搜索了一对多(HasMany)的例子并尝试了它们但没有任何工作。谁知道什么可能是错的?

        List<User> usr = new List<User>();
        using (var session = SessionFactoryHelper.OpenSession())
        {
            using (var transaction = session.BeginTransaction())
            {



               User u = new User
               {
                   Name = "Mohindra",
                   Password = "Corn"
               };

               Article a = new Article
               {
                   Title = "Doh!",
                   Ingress = "yada yada",
                   ArticleText = "why dammit! whyyy?!11!!",
                   Created = DateTime.Now,
                   Author = u
               };

               session.Save(u);
               session.Save(a);


               usr = session.Query<User>().ToList();
               transaction.Begin();

               transaction.Commit();
            }
        }

这些是我的映射

{{1}}

这是我对插入/选择

的呼吁
{{1}}

这可能是最简单的新手错误,但我对使用O / RM非常陌生,所以我不知道这里可能出现什么问题。

Image

1 个答案:

答案 0 :(得分:2)

用于, HasMany(x => x.Articles).Table("Article").KeyColumn("UserId").LazyLoad(); 然后我独立保存了我的对象。

当我应该使用时, HasMany(x => x.Articles).Table("Article").KeyColumn("UserId").Cascade.All();

^在这种情况下,Article继承了我的User,然后我可以用关系保存它们。