NHibernate ID Private Setter(任何解决方法)

时间:2010-12-21 12:32:42

标签: c# nhibernate setter automatic-properties

这是一个可以使用NHibernate映射的“简化”类;

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

由于ID字段有私有的setter,我们在我们手动设置ID字段的应用程序中不再有这样的代码;

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

这里我们手动创建一个可以分配给任何东西的DefaultTemplate对象。其他模板由用户手动创建并保存到数据库中。

我们如何才能实现这种功能?

请注意:C#Winforms,.NET 3.5,我们不想为此使用Reflection。

2 个答案:

答案 0 :(得分:1)

如果可行,我会这样做:

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;

答案 1 :(得分:0)

使用protected而非private。

修改:等等,我想念您的问题,您希望将其公开以便进行设置吗?

为什么要手动分配值?

你可以有一个获取Id的构造函数。然后做:

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

但是,无论是公开还是反思。为什么需要手动设置值?