2013-01-15 52 views
0

我想獲得一個List<User>又包含了每一個UserList<Article>,但是當我查詢得到List<User>User(唯一User)具有List<Article>但它不包含任何東西。功能NHibernate列表<T>內部類

我檢查了我的數據庫和鍵匹配,所以我的猜測(嗯,沒有太多的猜測)是我的映射有一些問題。我搜索了一對多(HasMany)的例子,並嘗試了它們,但沒有任何工作。任何人有任何想法可能是錯誤的?

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); 
     } 
    } 

這裏是我的電話插入/選擇

 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(); 
      } 
     } 

這可能是最簡單的新手的錯誤,但是我使用O/RM非常新,所以我不知道這裏可能是什麼問題。

Image

+0

到目前爲止映射看起來很好,但似乎你的用戶不包含任何文章。 'u.Articles.Add(a);'應該有幫助。 – philipproplesch

+0

噢,我認爲這將能夠讓FNH能夠「自動地」映射 – aLoveForCoffee

+0

老實說,我現在還不太確定。另一個原因可能是LazyLoad()。如果你迭代文章會發生什麼? – philipproplesch

回答

2

使用 HasMany(x => x.Articles).Table("Article").KeyColumn("UserId").LazyLoad(); 然後我獨立救了我的對象。

當我應該使用, HasMany(x => x.Articles).Table("Article").KeyColumn("UserId").Cascade.All();

^在這種情況下,Article繼承了我User,我可以再保存他們的關係。