NHibernate ConfORM Mapping
前言
昨天写了一篇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相关推荐
- 使用NHibernate 3.2实现Repository(ORuM)(三)NHibernate、Mapping、Mapping-By-Code
NHibernate使用时通常是先定义实体类,再为实体类映射数据库关系,NHibernate映射是使用XML文件形式的. 当我们Confrontation NHibernate时Mapping的过程: ...
- NHibernate Inheritance Mapping 继承映射
参考PoEAA,继承的设计模式有:Concrete Table Inheritance(具体表继承).Single Table Inheritance(单表继承).Class Table Inheri ...
- NHibernate之Mapping 之 Property
NotNullable 默认数据库字段可以为空 转载于:https://www.cnblogs.com/ymj126/archive/2013/01/31/2887256.html
- [原创]Fluent NHibernate之旅
ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibe ...
- nhibernate处理多数据库
nhibernate处理多数据库 When using NHibernate in an ASP.NET application it is important to manage sessions ...
- Fluent NHibernate之旅
ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibe ...
- Fluent NHibernate入门
一.Fluent NHibernate是什么. Fluent NHibernate提供了一个方法让你不再需要去写NHibernate的标准映射文件(.hbm.xml),而是可以把你的映射文件都使用C# ...
- 如何使用Fluent NHibernate
Fluent NHibernate 在我们使用数据库的时候,通常都要和其他的编程软件一起使用,如java.c++.c# 等等,那如何使它们交互使用,我们就说一下Fluent NHibernate,(注 ...
- CQRS体系结构模式实践案例:Tiny Library:领域仓储与事件存储
领域仓储(Domain Repository)与事件存储(Event Store)是CQRS体系结构应用系统中C部分(Command部分)的重要组件.虽然都是存储机制,但两者有着本质的区别:领域仓储是 ...
最新文章
- 《DSP using MATLAB》示例 Example 6.25
- 解决mysql建立的数据库名字不能带大写字母
- 最全技术剖析:百度视觉团队获世界最大规模目标检测竞赛冠军
- signature=52ceb41d49ce2ed43689f29f1663e802,SINGLE SIGN ON WITH MULTIPLE AUTHENTICATION FACTORS
- 转 UIAlertView 不显示、屏幕变灰
- 使用OpenCV3处理图像
- JavaScript多种跨域方式
- 日产汽车宣布已关停日、英、美、南非、俄等地工厂
- 51. magento 手动创建订单
- 【转载】如何在Ubuntu上安装LAMP服务器系统?
- php手机网页_使用PHPCMS搭建wap手机网站
- 麻省理工成立金融科技实验室,蚂蚁金服成唯一中国创始企业
- 推荐好用的临时邮箱工具,解决注册网站收到的垃圾邮件
- Unity官方文档解读之如何使用粒子系统创建汽车尾气
- laravel5整合sendcloud邮箱服务
- Java获取图片传到前端,生成二维码给前端
- 中国平安增持华夏幸福5.69%股权 看好长期战略协同
- 树莓派指定挂载点挂载移动硬盘
- java 离线语音识别
- 客户流失及用户画像分析