nhibernate如何处理本身不是真正实体的表?

时间:2009-07-18 18:56:20

标签: asp.net-mvc nhibernate

我理解nhibernate如何映射像Users和Addresses这样的表。

但如果我有一张像这样的表怎么办?

Users_Addresses包含UserID,AndressID列。

我是否必须为此创建映射并使其像普通实体一样?它实际上是一个我将在内连接中引用的表。

2 个答案:

答案 0 :(得分:4)

使用NHibernate,您可以独立于数据库布局设计代码。您不必(也不应该)创建与数据库表和列完全相同的类。 例如:

public class User
{
    public IList<Address> Addresses { get; private set; }

    public int Id { get; set; }
}

映射取决于地址和用户之间的关系:

  • 用户可以拥有多个地址吗?
  • 多个用户可以拥有相同的地址吗?
  • 你想要什么内心加入什么? (我希望有很多对很多人 这里与外部联系的关系)

在用户具有多个地址且不同用户可以使用这些地址的情况下,您可以使用多对多映射来映射地址。 映射还取决于您希望如何创建用户和地址类。

  • 在用户中设置地址列表是否合乎逻辑?
  • 在地址中设置用户列表是否合乎逻辑?
  • 用户可以两次使用相同的地址吗?

NHibernate的想法是:以您喜欢的方式编写代码,并在以后向数据库添加映射。

答案 1 :(得分:0)

地址通常被认为是您正在讨论的场景中的值类型 - 它在用户之外没有内在身份。

nHibernate中的值类型被映射为组件。值类型的集合被映射为一组复合元素。

有关如何执行此操作的详细信息,请参阅https://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/components.html