我正在开发我的第一个NHibernate项目,所以这似乎是一个简单的问题。
以下内容从我的真实场景中简化,以传达具体问题。
假设我有一个客户实体
public class Customer
{
prop virtual int ID { get; set; }
prop virtual string Name { get; set; }
prop virtual Region Region { get; set; }
}
和我的Region Entity(区域就像,NorthWest,MidWest等 - 一个非常明确的列表,可以在某种下拉列表中)
public class Region
{
prop virtual int ID { get; set; }
prop virtual string Name { get; set; }
private readonly IList<Customer> _customers = new List<Customer>();
public virtual void Add(Customer customer)
{
_customers.Add(customer);
}
public virtual void Remove(Customer customer)
{
_customers.Remove(customer);
}
public virtual Customer[] GetCustomers()
{
return _customers.ToArray();
}
}
当我去坚持客户实体时,我真的只想拥有3条信息(Customer.ID,Customer.Name和&amp; Customer.Region.ID),我如何实现这一点,因为NHibernate期望一个包含完整Region实体(不仅仅是ID)的客户实体......
答案 0 :(得分:6)
您可以使用“加载”按ID获取Region,而无需访问数据库。这将为您提供一个NHibernate将识别的实体,并允许您在没有额外数据库调用的情况下持久保存。
答案 1 :(得分:0)
我认为如果您已经拥有Region的ID,则只需将该Id分配给新的Region对象并将其附加到您的新Customer。只要您在Customer映射中没有将该关联的cascade属性设置为“all”或“update”(这实际上会更新DB中现有Region的数据),它将附加给定的Region给新客户。