假设我有两个通过一二多相关的类:
public class Customer
{
public virtual Guid Id {get; set;}
public virtual string Name {get; set;}
public virtual IList<Order> Orders {get; set;}
}
public class Orders
{
public virtual Guid Id {get; set;}
public virtual string Name {get; set;}
// public virtual Customer Customer {get; set;}`
}
而且我不希望 Orders 类中存在记录的 Customer 对象 - 但这意味着我无法使用 References 方法来进行映射 References(x => x.Customer)。
映射 Customer 对象时,我仅使用 HasMany(x => x.Orders) 方法。当我创建表并插入数据时, 订单表中由 nhibernate (Customer_id) 创建的外键列为 NULL。
是否可以在不将 Customer 属性添加到 Orders 对象的情况下完成此操作?
不确定真正的原因:
...我不想在订单中记录客户对象...
最有可能的是对上层隐藏,从业务领域角度隐藏。
在这种情况下,我们仍然应该从 ORM 的本机行为中受益,它是由引用映射驱动的。 IE。我们应该将此类引用保留在 POCO 级别,保留其映射,但将其隐藏以供任何其他使用。如何?例如。具有
protected
访问权限
//public virtual Customer Customer {get; set;}
protected virtual Customer Customer {get; set;}
仍然可以映射,我们仍然可以从 NH 原生功能中获益..但是上层将无法从 Order 访问 Customer...
我遇到了同样的问题,发现这个老问题没有令人满意的解决方案。
确实可以省略 Order 中的反向引用:您可以将
.Not.KeyNullable()
添加到 Customer 的 HasMany
映射中,如下所示:
public class CustomerMap {
//...
HasMany(x => x.Orders).Cascade.SaveUpdate().Not.KeyNullable();
}