Я пытаюсь понять, что я думал, было просто от простого к сопоставлению с использованием свободного Nhibernate. Я надеюсь, что кто-то может указать мне на правильный каталог, чтобы достичь этого во многих отношениях. У меня есть таблица статей и таблица категорий. . Многие статьи могут принадлежать только одной категории. Теперь таблица «Мои категории» содержит 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 Категорию из-за левые внешнее соединение, используемого NHibernate любой идея, что я делаю неправильно здесь? Благодаря [Solution] После нескольких часов чтения NHibernate документы я вот что я придумал
var criteria = session.CreateCriteria(typeof (Category));
criteria.AddOrder(Order.Asc("Description"));
criteria.SetResultTransformer(new DistinctRootEntityResultTransformer());
var cats1 = criteria.List<Category>();
Использование NHibernate поставщика
var linq = session.Linq<Category>();
linq.QueryOptions.RegisterCustomAction(c => c.SetResultTransformer(new DistinctRootEntityResultTransformer()));
var cats2 = linq.ToList();
У меня нет никаких проблем в сохранении какого-либо из субъектов Проблемы заключается в выборе категории У меня есть четыре статьи с CategoryId от 1 «Finanace» , когда я исполняю тест, я получаю Категорию «Финансы» вернулся множественным раз. я пытаюсь получить четыре категории и иметь доступ к статьям, ссылающимся на них. – Sammy
Найдено решение, см. «Редактирование вопроса» для 2 примеров реализации – Sammy
См. Изменения в моем ответе. Надеюсь это поможет. –