参考了李会京老师的:Nihibernate 系列教程
与网络上的Castle文章 这里做一个整合!
首先先创建一个项目 先来看一下项目的结构!
看名字就应该知道是做什么的把!
Mode:当然就是做存放数据库实体映射的表啦,与表映射的关系! 那么要这么映射呢,这时 我们的Nhibernate就要大显身手了!
用到了 Nhibernate的 CodeFirst 以前咱们配置表关系的文件是XML 现在不用啦! 我门可以写成类文件!
导入:Nhibernate.dll、Iesi.Collections
以Northwind 数据库为例子!
这里只做一张客户表:
using System;
namespace Mode{[Serializable]
public class Customers {public virtual string CustomerID { get; set; }
public virtual string CompanyName { get; set; } public virtual string ContactName { get; set; } public virtual string ContactTitle { get; set; } public virtual string Address { get; set; } public virtual string City { get; set; } public virtual string Region { get; set; } public virtual string PostalCode { get; set; } public virtual string Country { get; set; } public virtual string Phone { get; set; } public virtual string Fax { get; set; } }}Maaping:
using NHibernate;
using NHibernate.Mapping.ByCode;using NHibernate.Mapping.ByCode.Conformist;using Mode.Entity;namespace Mode.Mapping
{ public class Customers_Mapping : ClassMapping<Customers> { public Customers_Mapping() { Id(ec => ec.CustomerID, em => { em.Column("CustomerID"); em.Generator(Generators.Assigned); em.Length(5); });
Property(column => column.CompanyName, em => { em.Type(NHibernateUtil.String); em.Column("CompanyName"); em.Length(40); });
Property(column => column.ContactName, em => { em.Type(NHibernateUtil.String); em.Column("ContactName"); em.Length(30); });
Property(column => column.ContactTitle, em => { em.Type(NHibernateUtil.String); em.Column("ContactTitle"); em.Length(30); }); Property(column => column.Address, em => { em.Type(NHibernateUtil.String); em.Column("Address"); em.Length(60); }); Property(column => column.City, em => { em.Type(NHibernateUtil.String); em.Column("City"); em.Length(15); }); Property(column => column.Region, em => { em.Type(NHibernateUtil.String); em.Column("Region"); em.Length(15); }); Property(column => column.PostalCode, em => { em.Type(NHibernateUtil.String); em.Column("PostalCode"); em.Length(10); }); Property(column => column.Country, em => { em.Type(NHibernateUtil.String); em.Column("Country"); em.Length(15); }); Property(column => column.Phone, em => { em.Type(NHibernateUtil.String); em.Column("Phone"); em.Length(24); }); Property(column => column.Fax, em => { em.Type(NHibernateUtil.String); em.Column("Fax"); em.Length(24); });}
}}看不懂?别急我来给你看下一段代码你就明白了! 现在我们先把事做完了! 现在我们要添加Mapiing里得映射关系到Hibnernate中至少得让Hibernate知道怎么映射的把?
private static readonly ModelMapper mapper = new ModelMapper();
static ClassMappingService() { MappingTableEntities(); } public static HbmMapping GetMapping() { return mapper.CompileMappingForAllExplicitlyAddedEntities(); //当你调用mapper.CompileMappingForAllExplicitlyAddedEntities().AsString()方法你会发现其中的奥秘!其实他就是把这个输出成XML文件 映射。 如果还不懂 去看看李会京老师的文章 } public static void MappingTableEntities() { mapper.AddMapping<Customers_Mapping>(); //如果有多个一直调用AddMapping方法 }解释下这个类的方法把
ModelMapper提供一种基本映射方式:使用Class方法对实体类特定映射:
最后调用CompileMappingForAllExplicitAddedEntities方法显式所有映射的实体(这里是Customers)编译为HbmMapping对象并输出,也可以使用CompileMappingFor方法指定实体类型。 HbmMapping对象如果有看源代码的人~就会明白 其他他是通过序列化成一个XML的!
好多要写啊~先写这么多~ 第一次写笔记~如果我有什么理解错误的,请前辈门指教~ 让园里的前辈见笑了~
本文参考N多文章,就不一一感谢了!!!!!