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 = ;
- db.LogFormattedSql = true;
- db.LogSqlInConsole = true;
- db.AutoCommentSql = true;
- });
- var mapping = GetMappings();
- //在Configuration中添加HbmMapping
- configure.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自带的代码映射方式同样支持编写规则映射,这样在项目中会节约很多的时间,相比直接感觉还是用这个比较直接了,毕竟不需要引入第三方类库。
此映射方式初次使用,若有不合理的地方,欢迎批评指正。
NHibernate ConfORM Mapping的更多相关文章
- SQLSERVER2012 列存储索引的简单研究和测试
SQLSERVER2012 列存储索引的简单研究和测试 SQLSERVER2012 列存储索引的简单研究和测试 看这篇文章之前可以先看一下下面这两篇文章: 列存储索引 http://www.cnblo ...
- NHibernate3剖析:Mapping篇之ConfORM实战(1):概览
ORuM思想浮出 对于ORM(Object Relational Mapping)我们太熟悉了,可是我们从还有一个角度能够想象出ORuM(Object Relational un-Mapping)的思 ...
- NHibernate系列文章二十七:NHibernate Mapping之Fluent Mapping基础(附程序下载)
摘要 从这一节起,介绍NHibernate Mapping的内容.前面文章都是使用的NHibernate XML Mapping.NHibernate XML Mapping是NHibernate最早 ...
- 【翻译】首个基于NHibernate的应用程序
首个基于NHibernate的应用程序 Your first NHibernate based application 英文原文地址:http://www.nhforge.org/wikis/how ...
- 跟我学 NHibernate (三)
在使用 NHibernate 时,一定要将Mapping 映射文件,也就是 xml 文件的编译方式设置成 嵌入式,这是因为在 NHibernate 启动时,它会主动的到项目的启动目录中寻找 被设置为嵌 ...
- MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many)
MyGeneration的几个NHibernate模板功能已经很强,但还是存在些问题.例如:Guid主键支持不佳,代码不易修改,不支持中文注释等等.所以我决定自己来改写此模版.我把一部分通用的函数提取 ...
- 用MyGeneration模板生成NHibernate映射文件和关系
用我的MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many) MyGeneration的几个NHibernate模 ...
- ASP.NET MVC NHibernate 整合
请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...
- NHibernate官方文档中文版--ISessionFactory的配置(ISessionFactory Configuration)
由于NHibernate是被设计应用在许多不同环境中的,因此它存在很多配置参数.幸运的是,这些参数大多都有合理的默认值,而且NHibernate发布的时候伴随着一个App.config 例子(可在sr ...
随机推荐
- STRIDE 和 DREAD
目录 STRIDE 和 DREAD 背景 STRIDE DREAD 注释 STRIDE 和 DREAD 背景 STRIDE 和 DREAD 是最常用也是最好用的安全模型 STRIDE 主要负责对安全风 ...
- CodeForces 838A Binary Blocks(前缀和)题解
题意:给你个n*m的矩阵,要求你找到一个k,k > 1,使得矩阵可以分为很多k * k的小正方形,然后进行操作把每个小正方形都变为0或1,问你怎样使操作数最小. 思路:随便暴力不可取,显然你每次 ...
- 日志自定义Tag
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentHashMap; /** * Crea ...
- 【日志】修改redis日志路径
redis默认不记录log文件,需要在Redis.conf文件,找到loglevel notice,在其后的logfile "",双引号中,写redis的路径"/redi ...
- fiddler几种功能强大的用法(二)
参考网址:http://blog.rekfan.com/articles/228.html http://www.cnblogs.com/tugenhua0707/p/4637771.html htt ...
- SQL优化:清理生产环境中已失效字段基本步骤
1.统计相应字段的数据情况(如:几年没更新,无数据等情况) 2.确认产品逻辑已无效(产品经理邮件确认) 3.数据备份 4.将数据清空(置为0或空) 5.测试环境中删除引用页面 6.修改定时程序,存储过 ...
- C# 后台模块 Word 模板操作
public static string CreateWord() { //********************************************** //来自博客http://bl ...
- Flutter基础Widget之按钮(RaisedButton、FlatButton、OutlineButton,IconButton)
Flutter中给我们预先定义好了一些按钮控件给我们用,常用的按钮如下 RaisedButton :凸起的按钮,其实就是Android中的Material Design风格的Button ,继承自Ma ...
- Linux下,EPM11.1.1.3 configurator 不能启动AdminServer
需要测试环境, 安装EPM11.1.1.3 到 CentOS 5.6 在运行configurator(/app/hyperion/common/config/9.5.0.0 时, 卡在[Startin ...
- HTML5-canvas实例:2D折线数据图与2D扇形图
基础知识: <canvas id="demo" width="400" height="400"></canvas> ...