NHibernate: нужна помощь в составлении маппинга либо запроса к БД
Использую Fluent NHibernate.
БД вида:
Код:
TABLE parents
***id
***system_name
TABLE children
***id
***custom_name
***parent_id
FK: parent_id, который назван "FK_parent_id_to_id_in_parents"
***id
***system_name
TABLE children
***id
***custom_name
***parent_id
FK: parent_id, который назван "FK_parent_id_to_id_in_parents"
Код:
public class Parent
{
public virtual int Id { get; set; }
public virtual string SystemName { get; set; }
}
public class Child: Parent
{
public override int Id
{
get
{
return base.Id;
}
set
{
base.Id = value;
}
}
public virtual string CustomName
{
get
{
return _CustomName != null ? _CustomName : base.SystemName;
}
set
{
_CustomName = value;
}
}
public virtual Parent ParentId { get; set; }
private string _CustomName = string.Empty;
}
{
public virtual int Id { get; set; }
public virtual string SystemName { get; set; }
}
public class Child: Parent
{
public override int Id
{
get
{
return base.Id;
}
set
{
base.Id = value;
}
}
public virtual string CustomName
{
get
{
return _CustomName != null ? _CustomName : base.SystemName;
}
set
{
_CustomName = value;
}
}
public virtual Parent ParentId { get; set; }
private string _CustomName = string.Empty;
}
Код:
public class ParentMapper: ClassMap<Parent>
{
Table("parents");
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.SystemName, "system_name").Not.Nullable();
}
public class ChildMapper: ClassMap<Child>
{
Table("children");
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.DisplayName, "display_name");
References(x => x.ParentId).Column("parent_id").Cascade.None().ForeignKey("FK_parent_id_to_id_in_parents");
}
{
Table("parents");
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.SystemName, "system_name").Not.Nullable();
}
public class ChildMapper: ClassMap<Child>
{
Table("children");
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.DisplayName, "display_name");
References(x => x.ParentId).Column("parent_id").Cascade.None().ForeignKey("FK_parent_id_to_id_in_parents");
}
Код:
//где-то ранее открываем сессию ISession session а потом...
using(ITransaction tr = session.BeginTransaction())
{
List<Parent> lp = new List<Parent>(session.CreateCriteria(typeof(Parent)).List<Parent>());
tr.Commit();
}
using(ITransaction tr = session.BeginTransaction())
{
List<Parent> lp = new List<Parent>(session.CreateCriteria(typeof(Parent)).List<Parent>());
tr.Commit();
}
Нужно как-то правильнее создать запрос к базе или отмаппить, чтобы возвращалось нужное число записей, не гонялся лишний трафик и не нагружалась база, естестно =)