Как отобразить, когда есть два экземпляра класса во втором классе, используя свободный nhibernate? - PullRequest
0 голосов
/ 05 ноября 2010

Я провожу исследование того, какой из Entity Framework и (свободно) nHibernate лучше всего подходит для проекта.И я наткнулся на некоторые проблемы с отображением.Я надеюсь, что кто-то здесь может помочь мне с быстрым решением моей проблемы:)

Вот мои классы сущностей:

public abstract class DisplayItem
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
}

public class Link : DisplayItem
{
    public virtual Node FromNode { get; set; }
    public virtual Node ToNode { get; set; }

    public Link()
    {
    }
}

public class Node : DisplayItem
{
    public virtual IList<Link> LinksFrom { get; set; }
    public virtual IList<Link> LinksTo { get; set; }

    public Node()
    {
        LinksFrom = new List<Link>();
        LinksTo = new List<Link>();
    }
}

Сначала я попытался использовать автоматический картограф, ноэто не сработало вообще.Он создал базу данных и сохранил данные, но данные были подключены неправильно.Я думаю, что проблема возникает из-за того, что Link содержит два экземпляра Node

. Затем я попытался вручную отобразить его, вот код, который я использовал:я здесь не так делаю?

1 Ответ

1 голос
/ 05 ноября 2010

Во-первых, используйте дженерики для своих списков:

public class Node : DisplayItem
{
    public virtual IList<Link> LinksFrom { get; set; }
    public virtual IList<Link> LinksTo { get; set; }

    public Node()
    {
        LinksFrom = new List<Link>();
        LinksTo = new List<Link>();
    }
}

Во-вторых, у вас есть наследование, но вы не указали, какой стиль вам делать в базе данных.Если вы хотите игнорировать наследование, вам нужно сделать это Игнорирование базовых типов :

AutoMap.AssemblyOf<Entity>(cfg)
  .IgnoreBase<Entity>();

По умолчанию используется таблица для каждого подкласса.

Есливы делаете иерархию таблиц для классов, будьте осторожны с this .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...