Как сопоставить коллекцию и свойство в классе A с одним свойством в классе B / C - PullRequest
0 голосов
/ 12 октября 2011

У меня есть 3 класса, которые я пытаюсь отобразить, используя свободный nHibernate, но я ударил стену.У меня есть коллекция в классе A, которая относится к классу B, B также имеет ссылку на A. Так что это отношение «многие к одному».Моя проблема в том, что A также имеет ссылку на C (который расширяет B), и, поскольку у него уже есть ссылка на A (через B), я не хочу создавать новое свойство, чтобы сделать один ко многимотношения между A и C. Возможно ли это, или мне нужно сделать второе свойство в C?

public class A
{
  public virtual IList&ltB> AllBInstances { get; set; }

  public virtual C ActiveC { get; set; }
} 

public class B
{
  public virtual A Parent { get; set; }
}

public class C : B
{}

1 Ответ

2 голосов
/ 12 октября 2011

для приведенного примера здесь отображаются

class AMap : ClassMap<A>
{
    public AMap()
    {
        Id(x => x.Id);

        HasMany(x => x.AllBInstances)
            .KeyColumn("A_id")
            .Cascade.All();

        References(x => x.ActiveC);
    }
}

class BMap : ClassMap<B>
{
    public BMap()
    {
        Id(x => x.Id);

        References(x => x.Parent, "A_id");
    }
}

class CMap : SubclassMap<C>
{
    public CMap()
    {
    }
}

что даст вам

table "A" (
    Id  integer,
   ActiveC_id INTEGER,
   primary key (Id)
)

table "B" (
    Id  integer,
   A_id INTEGER,
   primary key (Id)
)

table "C" (
    B_id INTEGER not null,
   primary key (B_id)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...