Fluent Nhibernate code frist简单配置

 

前言

在以前的项目开发过程中使用nhibernate做完orm映射工具需要编写大量的xml映射文件,项目过程中往往会因为一个字段等小小的映射错误而很难去发现问题所在而且非常繁琐,后来我们的项目中采取了第三方的映射插件Nhibernate.Mapping.Attribute直接在实体类上标记生成映射文件,最近的新项目中打算使用fluent nhibernate,这个工具中提供了一个方法让你不再需要去写NHibernate的标准映射文件(.hbm.xml),而是可以把映射文件都使用C#来写。这样做,方便了我们的代码重构,提供了代码的易读性,并精简了项目代码,今天抽空简单学习一下,下面我们通过手动编写实体类,映射,来生成数据库。

实现

1、首先我们通过nuget包管理器添加fluent nhibernate的引用,安装成功后会自动添加对nhibernate的引用。

2、编写实体类,注意实体的属性都是virtual

编写Employee实体:

namespace FluentNH.Model
{
public class Employee
{
public virtual int Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string Position { get; set; }
public virtual Department EmployeeDepartment{get;set;}
} }

编写Department实体:

namespace FluentNH.Model
{
public class Department
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string PhoneNumber { get; set; }
}
}

3、实体类编写完成以后我们用代码的方式实现对两个实体的映射

Department映射:

namespace FluentNH.Mapping
{
class DepartmentMap : ClassMap<Department>
{
public DepartmentMap()
{
Id(x => x.Id); Map(x => x.Name); Map(x => x.PhoneNumber); Table("Department");
}
}
}

EmployeeMap映射:

class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Id(x => x.Id); Map(x => x.FirstName); Map(x => x.Position); References(x => x.EmployeeDepartment).Column("DepartmentId"); Table("Employee");
}
}

实体类及映射代码完成以后,若有任何一点改动我们需要在此修改。在映射文件构造函数里面的方法Map映射某一属性到表里面的列,References多对一的关系并制定生成列的名称,Tabel是指生成的表的名称。

4、编写辅助类配置Fluent nhiberate生成数据库及表结构

public class NHibernateHelper
{
private static ISessionFactory _sessionFactory; private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null) InitializeSessionFactory();
return _sessionFactory;
}
} private static void InitializeSessionFactory()
{
_sessionFactory = Fluently.Configure()
//配置数据库
.Database(MsSqlConfiguration.MsSql2008
//指定连接字符串,也可写在配置文件中
.ConnectionString(
@"Server=(local);initial catalog=nhibernate;
user=sa;password=123456;")
.ShowSql()//显示sql语句
)
//指定需要映射的程序集
.Mappings(m =>
m.FluentMappings
.AddFromAssemblyOf<Program>())
.ExposeConfiguration(
//配置生成数据库及表结构
cfg => new SchemaExport(cfg).Create(true, true))
//创建session工厂
.BuildSessionFactory();
} public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}

具体配置可参考fluent nhibernate的api,也可参考文中代码注释。

5、在控制台程序中测试以上配置

class Program
{
static void Main(string[] args)
{
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var DepartmentObject = new Department { Name = "狼性法则", PhoneNumber = "18254241255" };
session.Save(DepartmentObject);
transaction.Commit();
Console.WriteLine("Department保存成功" + DepartmentObject.Name); Console.ReadKey();
}
}
}
}

运行程序,打开数据库查询生成的表结构,并可以在控制台中查看sql语句,如图。

可以看到生成的数据库及语句,但我们可以发现存在一些问题如,数据库中列的长度等,这些也是可以在映射文件配置中设定的,本文由于是对fluent nhibernate的初始也没考虑太多,基本使用实例就此完成。

 
 
 
标签: NHIBERNATE

Fluent Nhibernate code frist简单配置的更多相关文章

  1. 【翻译】Fluent NHibernate介绍和入门指南

    英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...

  2. Fluent Nhibernate之旅(五)--利用AutoMapping进行简单开发

    Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate的书中也相应的推荐了使用FN来进行映射配置,之前写的FN之旅至今还有很多人会来私信我问题,说来惭愧, ...

  3. EntityFramework数据库配置(code frist)

    什么也不说先贴代码 <?xml version="1.0" encoding="utf-8"?> <configuration> < ...

  4. 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)

    在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...

  5. [Fluent NHibernate]第一个程序

    目录 写在前面 Fluent Nhibernate简介 基本配置 总结 写在前面 在耗时两月,NHibernate系列出炉这篇文章中,很多园友说了Fluent Nhibernate的东东,也激起我的兴 ...

  6. [Fluent NHibernate]一对多关系处理

    目录 写在前面 系列文章 一对多关系 总结 写在前面 上篇文章简单介绍了,Fluent Nhibernate使用代码的方式生成Nhibernate的配置文件,以及如何生成持久化类的映射文件.通过上篇的 ...

  7. Code First03---CodeFirst根据配置同步到数据库的三种方式

    上一节我们说到使用Fluent API对实体的配置,但是有一个问题了,在业务中我们可以用到的实体很多,那是不是每个都需要这样去配置,这样就造成我们重写的OnModelCreating方法很庞大了.所以 ...

  8. Entity Framework 6.x Code Frist For Oracle 实践与注意点

    Entity Framework 6.x Code Frist For Oracle 实践与注意点 开发环境 Visual Studio.net 2015/2017 Oracle 11g/12c 数据 ...

  9. Fluent NHibernate and Mysql,SQLite,PostgreSQL

    http://codeofrob.com/entries/sqlite-csharp-and-nhibernate.html https://code.google.com/archive/p/csh ...

随机推荐

  1. WebBrowser控件使用技巧分享

    原文:WebBrowser控件使用技巧分享 在发布“淘宝登货员”时发现不少朋友对WebBrowser控件比较感兴趣,故在此分享一下使用心得. 首先分享一个WebBrowser的扩展类(此类所需的dll ...

  2. C语言使用SQLite3数据库

    原文:C语言使用SQLite3数据库 SQLite是一个著名的免费数据库(不管是商用还是私人使用都免费),已经向众多公司如Adobe, Airbus, Apple, google, GE, Micro ...

  3. 面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式

    什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下 ...

  4. 正则提取文本中的颜色值 #xxxx,不严谨版本

    不严谨但兼容性最好: #[a-fA-F0-9]+ 增加严谨性: #[a-fA-F0-9]{1,6}

  5. 实例学习SSIS(二)--使用迭代

    原文:实例学习SSIS(二)--使用迭代 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习SSIS(四)-- ...

  6. 用批处理文件自动备份文件及文件夹,并自动删除n天前的文件

    原文:用批处理文件自动备份文件及文件夹,并自动删除n天前的文件 ---恢复内容开始--- 下是备份的批处理,添加到"计划任务"中,设定时间自动运行 复制代码 代码如下:@echo ...

  7. 删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005,

    原文:删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005, --删除指定表中所有索引 --用法:declare @tableName varchar(100 ...

  8. Ibatis配置存储过程xml文件案例

    -- <parameterMaps> <!--注意:parameterMap中的参数个数和顺序要和ProcGetPersonByName存储过程中的一致--> <para ...

  9. 安卓推送——个推服务端api使用误区

    首先你需要在个推开放着平台上注册你的应用,以及获得以下几个必要的值APPID |APPKEY | MASTERSECRET,本文假设你已经完成上述步骤以及完成客户端SDK的集成. 原理 个推服务端ap ...

  10. c#事件求解

    闲来无聊对于clr一书又重新温习了下,但是看到事件这张后还是有很多的困惑,对于事件能力CLR是这样描述,通知其它对象发生特定的事情. 1.其它对象:是指对于事件的关注者 2.特定的事件:对于满足事件交 ...