流畅的nhibernate一对多映射,无需References方法

问题描述 投票:0回答:2

假设我有两个通过一二多相关的类:

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 对象的情况下完成此操作?

c# .net nhibernate fluent-nhibernate fluent-nhibernate-mapping
2个回答
0
投票

不确定真正的原因:

...我不想在订单中记录客户对象...

最有可能的是对上层隐藏,从业务领域角度隐藏。

在这种情况下,我们仍然应该从 ORM 的本机行为中受益,它是由引用映射驱动的。 IE。我们应该将此类引用保留在 POCO 级别,保留其映射,但将其隐藏以供任何其他使用。如何?例如。具有

protected
访问权限

//public  virtual Customer Customer {get; set;}
protected virtual Customer Customer {get; set;}

仍然可以映射,我们仍然可以从 NH 原生功能中获益..但是上层将无法从 Order 访问 Customer...


0
投票

我遇到了同样的问题,发现这个老问题没有令人满意的解决方案。

确实可以省略 Order 中的反向引用:您可以将

.Not.KeyNullable()
添加到 Customer 的
HasMany
映射中,如下所示:

public class CustomerMap {
    //...
    HasMany(x => x.Orders).Cascade.SaveUpdate().Not.KeyNullable();
}
© www.soinside.com 2019 - 2024. All rights reserved.