NHibernate ID Private Setter (любой обходной путь) - PullRequest
0 голосов
/ 21 декабря 2010

Вот «упрощенный» класс, который можно сопоставить с помощью NHibernate;

public class Template
{
  public virtual int Id { get; private set; }
  public virtual string Name { get; set; }
}

Поскольку у поля идентификатора есть личный установщик, мы больше не можем иметь такой код в нашем приложении, где мы вручную устанавливаем поле идентификатора;

var DefaultTemplate = new Template { ID = (int)TemplateEnum.Default, Name = "Default" }

Здесь мы вручную создаем объект DefaultTemplate, который мы можем присвоить чему угодно. Другие шаблоны создаются пользователями вручную и сохраняются в базе данных.

Есть идеи, как мы все еще можем достичь такого рода функциональности?

Обратите внимание: C # Winforms, .NET 3.5, и мы не хотим использовать Reflection для этого.

Ответы [ 2 ]

1 голос
/ 21 декабря 2010

Я бы сделал это следующим образом, если это возможно:

public class Template
{
  public virtual int Id { get; private set; }
  public virtual string Name { get; set; }

  public static readonly Template Default = new Template() {ID = (int)TemplateEnum.Default, Name = "Default"};
}

Тогда вы всегда можете 'получить' шаблон по умолчанию, не создавая его экземпляры снаружи класса Template:

Template t = Template.Default;
0 голосов
/ 21 декабря 2010

Использовать защищенный вместо личного.

Редактировать : Подождите, я пропустил ваш вопрос, вы хотите, чтобы он был публичным, чтобы вы могли его задать?Вы хотите вручную присвоить значение?

У вас может быть конструктор, который принимает Id.Затем выполните:

var DefaultTemplate = new Template((int)TemplateEnum.Default) { Name = "Default" }

Но, тем не менее, это либо публика, либо рефлексия.Зачем вам нужно вручную устанавливать значение?

...