如何使用由其他复杂类型组成的NHibernate保存实体,但我只有其他复杂类型的ID

时间:2009-07-29 16:08:22

标签: c# nhibernate

我正在开发我的第一个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)的客户实体......

2 个答案:

答案 0 :(得分:6)

您可以使用“加载”按ID获取Region,而无需访问数据库。这将为您提供一个NHibernate将识别的实体,并允许您在没有额外数据库调用的情况下持久保存。

Reference

答案 1 :(得分:0)

我认为如果您已经拥有Region的ID,则只需将该Id分配给新的Region对象并将其附加到您的新Customer。只要您在Customer映射中没有将该关联的cascade属性设置为“all”或“update”(这实际上会更新DB中现有Region的数据),它将附加给定的Region给新客户。