NHibernate 3.2中的一对一映射通过代码进行映射

本文关键字:映射 代码 一对一 NHibernate | 更新日期: 2023-09-27 18:26:45

我正在努力学习NHibernate 3.2 built-in mapping by code apiNOT Fluent NHibernate)。你能帮我映射这些实体之间的一对一(或零)关系吗?

注意:我在谷歌上搜索了这个问题,还搜索了SOF,所有示例都使用Fluent API或XML;我正在尝试在NHibernate 3.2 中使用内置映射API

public class Person { 
    public virtual int Id { get; set; }  
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
    // can be null 
    public virtual Address Address { get; set; }
} 
 
public class Address { 
    public virtual int Id { get; set; } 
    public virtual string Line1 { get; set; } 
    public virtual string Line2 { get; set; } 
    public virtual string City { get; set; }
    // can not be null
    public virtual Person Person { get; set; } 
}

主要关键策略如下:

Id( 
    t => t.Id, 
    t => { 
        t.Generator(Generators.HighLow, g => g.Params(new { max_low = 100 })); 
        t.Column(typeof(TEntity).Name + "Id"); 
    });

NHibernate 3.2中的一对一映射通过代码进行映射

根据您的实际需求,一对一地图或多对一地图可能会回答您的问题。如果您需要真正唯一的双向约束,请查看此链接以获得一对一的约束:http://notherdev.blogspot.com/2012/01/mapping-by-code-onetoone.html

一对一通常是一种糟糕的策略,因为在几乎所有情况下,只将列全部放在一个表上是有意义的,如果您需要它们是域中的独立实体,则通过组件映射将它们分离。在域和数据模型中分离它们的典型方法是使用具有唯一约束的多对一,将其绑定回父级,这是一种常见的模式。

关于一般3.2映射的提示和提示,此资源对我有很大帮助:http://notherdev.blogspot.com/2012/02/nhibernates-mapping-by-code-summary.html