Component语义
使用ConfORM“映射”组件,我们无需特别设置,ConfORM内部会根据Domain定义来判定组件,一般而言,没有主键的类就是组件。
[Test]public void ComponentMappingDemo(){//show how work with components and how ConfORM understands OOPvar orm = new ObjectRelationalMapper();var mapper = new Mapper(orm);//use the definition of table-to-class strategy class by classorm.TablePerClass<Person>();// Show the mapping to the consolevar 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的映射字符串结果:
使用一个集合,而不是单一组件:
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的映射字符串结果:
实现实体与组件的双向关联关系:
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
时间: 2024-11-10 10:21:27