如何使用NHibernate查找值?

时间:2011-09-06 16:38:29

标签: nhibernate

如何使用NHibernate处理查找值?例如,我有一个Order实体,它有一个BillingAddress属性,它是一个名为Address的值对象,如果Address对象只包含State和Country属性作为字符串,则它很简单。但是,如果我希望国家/地区包含其州的列表,那么订单表格可以为每个选定的国家/地区填写适当的州下拉列表。

我还可以创建Country和State作为值对象吗?或者他们必须是实体?如果它们是实体,可以将Address作为值对象吗?

以下是我的示例的示例代码:

public class Order
{
  public virtual int OrderId { get; set; }
  public virtual Address BillingAddress { get; set; }
}

public class Address
{
  public virtual State State { get; set; }
  public virtual Country Country { get; set; }
}

public class Country
{
  public virtual string Name { get; set; }
  public virtual ICollection<State> States { get; set; }
}

public class State
{
  public virtual string Name { get; set; }
  public virtual Country Country { get; set; }
}

1 个答案:

答案 0 :(得分:1)

如果要将查找数据存储在数据库中,则它们必须是实体。否则,这取决于你。如果你这样做,我建议将它们标记为不可变,并将它们放在只读的第二层缓存中。

如果将它们存储为值,并且它们有多个字段,如缩写,名称,坐标等,那么您可以将id保存为数据存储中的值,并将查找数据硬编码为普通C#类。您只需从NHibernate中检索id值,然后您的调用代码将必须在类上运行查找方法。不那么优雅,但从NHibernate /数据库角度简化。

这两种方法都是可以接受的 - 它更多地取决于你打算如何使用它们:谁在维护和使用每个级别的代码,你想要缓存和/或查找代码,如果你控制调用代码等等。