Свободный NHibernate: Карта собственности без внешнего ключа? - PullRequest
3 голосов
/ 24 мая 2011

У меня есть два класса:

public class Parent
{
    public virtual string Name { get; set; }
    public virtual string Family_id { get; set; }
}

public class Children
{
    public virtual string Name { get; set; }
    public virtual DateTime BirthDate { get; set; }
    public virtual string Family_id { get; set; }
}

Когда я выбираю родителя, я также хочу получить самых старых (по назначению BirthDate) детей, у которых Family_id совпадает с родителем.

В базе данных нет внешнего ключа между родителем и дочерними элементами.

(я не хочу использовать два разных репозитория, мне нужна функциональность в сопоставлениях)

Является ли свойство-ref чем-то, что я могу использовать?

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Одной из стратегий будет принудительная загрузка коллекции «Дети» и создание другого свойства для получения самого старого дочернего элемента.

Свойство Ref используется для соединения с другой таблицей с использованием столбца, который не является основнымkey.

public class Parent
{
    public virtual int Id {get; set;}
    public virtual string Name { get; set; }
    public virtual string Family_id { get; set; }
    public virtual Children OldestChild {
     get {
          return Children.OrderBy(x=>x.BirthDate).FirstOrDefault();
     }}
    public virtual IList<Children> Children {get; set;}
}

public class ParentMap : ClassMap<Parent>{
    public ParentMap(){
        Id(x=>x.Id);
        Map(x=>x.Name);
        HasMany(x=>x.Children).PropertyRef("Family_id").Fetch.Join();
    }
}

Другая возможность заключается в добавлении столбца в родительскую таблицу (OldestChild_FK) и последующем присоединении к этой строке из таблицы Children.

1 голос
/ 24 мая 2011

Я думаю, что вы хотите создать свойство в Parent с именем OldestChild или список «Старших детей», игнорировать это свойство и написать собственный запрос (HQL или SQL), чтобы получить нужные результаты.1002 * Здесь - поток по игнорированию свойств в FluentNhibernate.

...