Какие из них работают в nhibernate? - PullRequest
1 голос
/ 18 февраля 2011

Я только собираюсь начать копаться в nHibernate, и я надеюсь, что вы можете дать мне небольшой старт здесь.

Я считаю, что POCO должен иметь открытый конструктор без параметров (?).А для дочерних коллекций используйте IList (хотя я видел IBag в некоторых примерах) (?)

Меня также интересует, какой доступ я могу предоставить или запретить публично для объектов.Вот пример:

public class Poco
{
    private IList<ChildPoco> _childPocos;

    //1) can use IEnumerable? Or have to use IList? Or third way?
    public IEnumerable<ChildPoco> ChildPocosEnumerable
    {
        get { return _childPocos.AsEnumerable(); }
    }

}

public class ChildPoco
{
    private string _name;
    public string Name
    {
        get { return _name; }
        //2) protected/public/private set?
    }
}

Итак, выше вы можете увидеть // 1) и // 2), можете ли вы просто объяснить, какие у меня есть варианты, которые nhibernate будет поддерживать?

Немного дополнительной информации, если это поможет.Желание в 1) использовать IEnumerable - сделать публичное лицо коллекции доступным только для чтения.

То же самое относится и к 2) с именем.Я хотел бы, чтобы это читалось только здесь.

Причина, по которой я спрашиваю, состоит в том, что у меня есть средства для создания некоторых pocos в данный момент, но я не смогу начать с nhibernate до тех пор, пока не попытаюсь немного запланировать заранее,

Спасибо.

1 Ответ

3 голосов
/ 18 февраля 2011

1) Используемые интерфейсы зависят от типа коллекции.

Для bag вы можете использовать IEnumerable<T>, ICollection<T> или IList<T>.

Для set вы можете использовать IEnumerable<T>, ICollection<T> или Iesi.Collections.Generic.ISet<T>.

Для list вы должны использовать IList.

Теперь AsEnumerable - это шпион. Если вы хотите, чтобы клиентский код не изменял коллекцию, используйте удостоверение, выберите вместо:

public IEnumerable<ChildPoco> ChildPocos
{
    get { return _childPocos.Select(x => x); }
}

И чтобы отобразить это, используйте access="field.camelcase-underscore". Это заставит NHibernate использовать поле _childPocos для ChildPocos persistence

2) Сеттер может иметь любую доступность по вашему желанию. И вам не нужно использовать вспомогательное поле:

public string Name { get; private set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...