前言

  昨天写了一篇fluent nhibernate通过约定的代码映射方式,NH在3.0版本以后已经集成了conform的代码映射方式,一直没注意也没使用过,今天试试怎么样。

步骤

1、通过conform方式生成如下数据库架构

2、添加项目对NH3.3的引用,3.0以后已经集成代码映射的方式在using NHibernate.Mapping.ByCode.Conformist;using NHibernate.Mapping.ByCode;命名空间中。

编写持久化对象:

public class Province{public Province(){Cities = new List<City>();}virtual public int Name{get;set;}virtual public int ProvienceID{get;set;}virtual public IList<City> Cities { get; set; }}
public class City{virtual public int CityID{get;set;}virtual public int Name{get;set;}virtual public Province Province { get; set; }}

集成using NHibernate.Mapping.ByCode.Impl.CustomizersImpl;命名空间下的ClassMapping<T>来实现代码配置持久化对象映射

Provience映射代码:

public class ProvinceMap : ClassMapping<Province>{public ProvinceMap(){Id(p => p.ProvienceID, map => map.Generator(Generators.Assigned));Property(p => p.Name);Bag(p => p.Cities, map => map.Key(k => k.Column("ProvinceId")), ce => ce.OneToMany());}}

CIty类映射代码:

public class CityMap : ClassMapping<City>{public CityMap(){Id(p => p.CityID, map => map.Generator(Generators.Assigned));Property(p => p.Name);ManyToOne(p => p.Province, map => map.Column("ProvinceId"));}}

3、NH配置

首先我们添加一个数据库连接的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration><connectionStrings><add name="NHConform" connectionString="Data Source=(local);initial catalog=NHConform;Integrated Security=SSPI"/>    </connectionStrings>
</configuration>

编写一个配置NH的类:

public static class NHContext{public static Configuration NHConfiguration { get; set; }public static ISessionFactory SessionFactory { get; set; }public static void AppConfigure(){#region NHibernate配置NHConfiguration = ConfigureNHibernate();SessionFactory = NHConfiguration.BuildSessionFactory();#endregion}private static Configuration ConfigureNHibernate(){var configure = new Configuration();configure.SessionFactoryName("BuildIt");configure.DataBaseIntegration(db =>{//配置数据库连接db.Dialect<MsSql2008Dialect>();db.Driver<SqlClientDriver>();db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;db.IsolationLevel = IsolationLevel.ReadCommitted;db.ConnectionStringName = "NHConform";db.Timeout = 10;db.LogFormattedSql = true;db.LogSqlInConsole = true;db.AutoCommentSql = true;});var mapping = GetMappings();//在Configuration中添加HbmMappingconfigure.AddDeserializedMapping(mapping, "NHConfORM");//配置元数据
            SchemaMetadataUpdater.QuoteTableAndColumns(configure);return configure;}public static HbmMapping GetMappings(){var mapper = new ModelMapper();mapper.AddMappings(Assembly.GetAssembly(typeof(ProvinceMap)).GetExportedTypes());var mapping = mapper.CompileMappingForAllExplicitlyAddedEntities();return mapping;}}

4、测试映射配置生成数据库架构,建了一个控制台程序没有写单元测试,生成数据库架构的代码

public static void Create(){NHContext.AppConfigure();new SchemaExport(NHContext.NHConfiguration).Create(false, true);}

在控制台主程序中执行Create()方法,生成数据库并生成如上图的数据库关系图。

测试删除数据库:

public static void Drop(){NHContext.AppConfigure();new SchemaExport(NHContext.NHConfiguration).Drop(false, true);}

执行Drop()方法以后数据库结构就被删除了,此处就不截图了。

结语

  NH自带的代码映射方式同样支持编写规则映射,这样在项目中会节约很多的时间,相比直接感觉还是用这个比较直接了,毕竟不需要引入第三方类库。

此映射方式初次使用,若有不合理的地方,欢迎批评指正。

转载于:https://www.cnblogs.com/flykai/p/3270569.html

NHibernate ConfORM Mapping相关推荐

  1. 使用NHibernate 3.2实现Repository(ORuM)(三)NHibernate、Mapping、Mapping-By-Code

    NHibernate使用时通常是先定义实体类,再为实体类映射数据库关系,NHibernate映射是使用XML文件形式的. 当我们Confrontation NHibernate时Mapping的过程: ...

  2. NHibernate Inheritance Mapping 继承映射

    参考PoEAA,继承的设计模式有:Concrete Table Inheritance(具体表继承).Single Table Inheritance(单表继承).Class Table Inheri ...

  3. NHibernate之Mapping 之 Property

    NotNullable  默认数据库字段可以为空 转载于:https://www.cnblogs.com/ymj126/archive/2013/01/31/2887256.html

  4. [原创]Fluent NHibernate之旅

    ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibe ...

  5. nhibernate处理多数据库

    nhibernate处理多数据库 When using NHibernate in an ASP.NET application it is important to manage sessions ...

  6. Fluent NHibernate之旅

    ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibe ...

  7. Fluent NHibernate入门

    一.Fluent NHibernate是什么. Fluent NHibernate提供了一个方法让你不再需要去写NHibernate的标准映射文件(.hbm.xml),而是可以把你的映射文件都使用C# ...

  8. 如何使用Fluent NHibernate

    Fluent NHibernate 在我们使用数据库的时候,通常都要和其他的编程软件一起使用,如java.c++.c# 等等,那如何使它们交互使用,我们就说一下Fluent NHibernate,(注 ...

  9. CQRS体系结构模式实践案例:Tiny Library:领域仓储与事件存储

    领域仓储(Domain Repository)与事件存储(Event Store)是CQRS体系结构应用系统中C部分(Command部分)的重要组件.虽然都是存储机制,但两者有着本质的区别:领域仓储是 ...

最新文章

  1. 《DSP using MATLAB》示例 Example 6.25
  2. 解决mysql建立的数据库名字不能带大写字母
  3. 最全技术剖析:百度视觉团队获世界最大规模目标检测竞赛冠军
  4. signature=52ceb41d49ce2ed43689f29f1663e802,SINGLE SIGN ON WITH MULTIPLE AUTHENTICATION FACTORS
  5. 转 UIAlertView 不显示、屏幕变灰
  6. 使用OpenCV3处理图像
  7. JavaScript多种跨域方式
  8. 日产汽车宣布已关停日、英、美、南非、俄等地工厂
  9. 51. magento 手动创建订单
  10. 【转载】如何在Ubuntu上安装LAMP服务器系统?
  11. php手机网页_使用PHPCMS搭建wap手机网站
  12. 麻省理工成立金融科技实验室,蚂蚁金服成唯一中国创始企业
  13. 推荐好用的临时邮箱工具,解决注册网站收到的垃圾邮件
  14. Unity官方文档解读之如何使用粒子系统创建汽车尾气
  15. laravel5整合sendcloud邮箱服务
  16. Java获取图片传到前端,生成二维码给前端
  17. 中国平安增持华夏幸福5.69%股权 看好长期战略协同
  18. 树莓派指定挂载点挂载移动硬盘
  19. java 离线语音识别
  20. 客户流失及用户画像分析

热门文章

  1. ASP.NET的状态管理
  2. 在windows中安装python
  3. TI xDAIS的深入理解
  4. 数字电路中的竞争与冒险
  5. 给定一个单词集合,找出可以相互转换的集合。比如abc bca cba都可以相互转换(变位词)
  6. 将论文中的所有参考文献编号批量上标化
  7. potplayer设置前进后退时间
  8. openpose_net随机搜索网络源代码
  9. 压缩网络模型,或者是融合多个神经网络
  10. (转)自动化管理工具Saltstack之nginx部署