我正在尝试学习NHibernate 3.2 built-in mapping by code api
( NOT Fluent NHibernate )。你能帮我在这些实体之间映射一对一(或零)关系吗?
注意:我用Google搜索了问题,我搜索了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");
});
答案 0 :(得分:5)
根据您的实际需要 - 一对一地图或多对一地图可以回答您的问题。如果您需要真正独特的双向约束,请参阅此链接以进行一对一: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