我想弄清楚我认为只是一个简单的一对多使用流利Nhibernate映射。我希望有人可以指向我的正确的目录,实现这一对多关系 我有一个文章表和一个类别表 许多文章只能属于一个类别 现在我的Categores表有4个类别和文章有一个文章关联与cateory1流利nhibernate一对多映射
这里是我的设置。
using FluentNHibernate.Mapping;
using System.Collections;
using System.Collections.Generic;
namespace FluentMapping
{
public class Article
{
public virtual int Id { get; private set; }
public virtual string Title { get; set; }
public virtual Category Category{get;set;}
}
public class Category
{
public virtual int Id { get; private set; }
public virtual string Description { get; set; }
public virtual IList<Article> Articles { get; set; }
public Category()
{
Articles=new List<Article>();
}
public virtual void AddArticle(Article article)
{
article.Category = this;
Articles.Add(article);
}
public virtual void RemoveArticle(Article article)
{
Articles.Remove(article);
}
}
public class ArticleMap:ClassMap<Article>
{
public ArticleMap()
{
Table("Articles");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Title);
References(x => x.Category).Column("CategoryId").LazyLoad();
}
public class CategoryMap:ClassMap<Category>
{
public CategoryMap()
{
Table("Categories");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Description);
HasMany(x => x.Articles).KeyColumn("CategoryId").Fetch.Join();
}
}
}
}
如果我运行这个测试
[Fact]
public void Can_Get_Categories()
{
using (var session = SessionManager.Instance.Current)
{
using (var transaction = session.BeginTransaction())
{
var categories = session.CreateCriteria(typeof(Category))
//.CreateCriteria("Articles").Add(NHibernate.Criterion.Restrictions.EqProperty("Category", "Id"))
.AddOrder(Order.Asc("Description"))
.List<Category>();
}
}
}
我得到7个大类由于LEFT OUTER JOIN通过NHibernate的 任何想法,我在做什么错在这里使用? 感谢 [解决方法] 了几个小时,我在这里读NHibernate的文档后就是我想出了
var criteria = session.CreateCriteria(typeof (Category));
criteria.AddOrder(Order.Asc("Description"));
criteria.SetResultTransformer(new DistinctRootEntityResultTransformer());
var cats1 = criteria.List<Category>();
使用NHibernate LINQ提供
var linq = session.Linq<Category>();
linq.QueryOptions.RegisterCustomAction(c => c.SetResultTransformer(new DistinctRootEntityResultTransformer()));
var cats2 = linq.ToList();
我有保存任何实体 的问题是选择分类 没有问题我有一个的categoryId一个四篇文章关闭1“Finanace” 当我执行的测试情况下,我得到类别“财经”返回了多个倍。我试图得到的是四个类别,并可以访问引用它们的文章。 – Sammy 2010-03-07 00:21:44
找到解决方案,请参阅问题的编辑2样本实施 – Sammy 2010-03-07 01:06:30
请参阅对我的答案的编辑。希望这可以帮助。 – 2010-03-08 12:47:22