我想獲得一個List<User>
又包含了每一個User
List<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非常新,所以我不知道這裏可能是什麼問題。
到目前爲止映射看起來很好,但似乎你的用戶不包含任何文章。 'u.Articles.Add(a);'應該有幫助。 – philipproplesch
噢,我認爲這將能夠讓FNH能夠「自動地」映射 – aLoveForCoffee
老實說,我現在還不太確定。另一個原因可能是LazyLoad()。如果你迭代文章會發生什麼? – philipproplesch