NHibernate3剖析:Mapping篇之ConfORM实战(5):Component语义
2010-10-03 13:46 李永京 阅读(5551) 评论(8) 编辑 收藏 举报本节内容
系列引入
NHibernate3剖析系列分别从Configuration篇、Mapping篇、Session篇、Core篇、Tool篇、Practice篇、Extension篇等方面全面揭示NHibernate3版本内容、特性及其应用,完全基于NHibernte3版本。
- NHibernate专题:http://kb.cnblogs.com/zt/nhibernate/
- NHibernate官方站点:http://nhforge.org/
- NHibernate参考文档:http://nhforge.org/doc/nh/en/
- 获取NHibernate地址:http://sourceforge.net/projects/nhibernate/files/
ConfORM概述
ConfORM实战系列:
- ConfORM实战(1):概览:ConfORM简单使用
- ConfORM实战(2):原理:ConfORM的基本实现原理
- ConfORM实战(3):OneToOne语义:使用ConfORM“映射”一对一关联
- ConfORM实战(4):ManyToMany语义:使用ConfORM“映射”多对多关联
如果你不熟悉ConfORM请查看前几篇文章,你可以到http://code.google.com/p/codeconform/获取ConfORM最新版本。
Component语义
使用ConfORM“映射”组件,我们无需特别设置,ConfORM内部会根据Domain定义来判定组件,一般而言,没有主键的类就是组件。
[Test]
public void ComponentMappingDemo()
{
//show how work with components and how ConfORM understands OOP
var orm = new ObjectRelationalMapper();
var mapper = new Mapper(orm);
//use the definition of table-to-class strategy class by class
orm.TablePerClass<Person>();
// Show the mapping to the console
var mapping = mapper.CompileMappingFor(new[] { typeof(Person) });
Console.Write(mapping.AsString());
}
一些Domain范例
我们使用各种集合定义Domain:
1.Mapping a class with components
Person实体有两个组件:
public class Person
{
public int Id { get; set; }
public Name Name { get; set; }
public Address Address { get; set; }
}
public class Name
{
public string First { get; set; }
public string Last { get; set; }
}
public class Address
{
public string Street { get; set; }
public int CivicNumber { get; set; }
}
Mapping
输出HbmMapping的映射字符串结果:
2.Mapping a class with double usage of same component
在上面Domain的基础上新增一个Name类型的属性:
public class Person
{
public int Id { get; set; }
public Name Name { get; set; }
public Name ShowBusinessAlias { get; set; }
public Address Address { get; set; }
}
Mapping
输出HbmMapping的映射字符串结果:
3.Collection of components
使用一个集合,而不是单一组件:
public class Person
{
private Iesi.Collections.Generic.ISet<Address> addresses;
public Person()
{
addresses = new Iesi.Collections.Generic.HashedSet<Address>();
}
public int Id { get; set; }
public Name Name { get; set; }
public ICollection<Address> Addresses { get { return addresses; } }
}
Mapping
输出HbmMapping的映射字符串结果:
4.Bidirectional relation
实现实体与组件的双向关联关系:
public class Person
{
public int Id { get; set; }
public Name Name { get; set; }
public Name ShowBusinessAlias { get; set; }
public Address Address { get; set; }
}
public class Name
{
public Person Person { get; set; }
public string First { get; set; }
public string Last { get; set; }
}
Mapping
输出HbmMapping的映射字符串结果:
结语
这篇文章展示ConfORM的Components语义应用,映射了一些Domain示例。接下来继续介绍ConfORM。Are you ConfORM?
参考资料
Fabio Maulo:ConfORM:“Mapping” Components
希望本文对你有所帮助。