Fluent Nhibernate code frist简单配置
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的初始也没考虑太多,基本使用实例就此完成。
Fluent Nhibernate code frist简单配置的更多相关文章
- 【翻译】Fluent NHibernate介绍和入门指南
英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...
- Fluent Nhibernate之旅(五)--利用AutoMapping进行简单开发
Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate的书中也相应的推荐了使用FN来进行映射配置,之前写的FN之旅至今还有很多人会来私信我问题,说来惭愧, ...
- EntityFramework数据库配置(code frist)
什么也不说先贴代码 <?xml version="1.0" encoding="utf-8"?> <configuration> < ...
- 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...
- [Fluent NHibernate]第一个程序
目录 写在前面 Fluent Nhibernate简介 基本配置 总结 写在前面 在耗时两月,NHibernate系列出炉这篇文章中,很多园友说了Fluent Nhibernate的东东,也激起我的兴 ...
- [Fluent NHibernate]一对多关系处理
目录 写在前面 系列文章 一对多关系 总结 写在前面 上篇文章简单介绍了,Fluent Nhibernate使用代码的方式生成Nhibernate的配置文件,以及如何生成持久化类的映射文件.通过上篇的 ...
- Code First03---CodeFirst根据配置同步到数据库的三种方式
上一节我们说到使用Fluent API对实体的配置,但是有一个问题了,在业务中我们可以用到的实体很多,那是不是每个都需要这样去配置,这样就造成我们重写的OnModelCreating方法很庞大了.所以 ...
- Entity Framework 6.x Code Frist For Oracle 实践与注意点
Entity Framework 6.x Code Frist For Oracle 实践与注意点 开发环境 Visual Studio.net 2015/2017 Oracle 11g/12c 数据 ...
- Fluent NHibernate and Mysql,SQLite,PostgreSQL
http://codeofrob.com/entries/sqlite-csharp-and-nhibernate.html https://code.google.com/archive/p/csh ...
随机推荐
- 选择29部分有用jQuery应用程序插件(免费点数下载)
免积分下载:http://download.csdn.net/detail/yangwei19680827/7238711 原文地址:http://www.cnblogs.com/sxwgf/p/36 ...
- android 反编译(dex 和 odex),非脑残转帖,绝对可靠
Android 反编译 反编译odex文件(比如framework.odex),若是反编译dex,直接第4步 1.因为反编译odex的工具在D:\Develop tools\android反编译工具\ ...
- asp.net动态加载ascx用户控件
原文:asp.net动态加载ascx用户控件 在主aspx/ascx文件中,将目标ascx1,ascx2控件拖拉到其页面中,然后删除,目的是要生成:Register 代码,然后在主文件中定义DIV或T ...
- SQL编程之生日问题
在学习MySQL的时候,一个较为经典的SQL编程题目就是生日问题,已知某个用户的出生日期和当前日期,计算他近期的生日. 一般须要考虑两个问题 闰年2月是29天 今年的生日是否过完 比如:某人的生日是1 ...
- 深入理解JavaScript(1)
才华横溢的Stoyan Stefanov,在他写的由O’Reilly初版的新书<JavaScript Patterns>(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会 ...
- 原生JavaScript生成GUID的实现
GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成GUID的API.生成算法很有意思,用到了以太网卡地址.纳秒级时间.芯片ID码和许多可 ...
- android文件缓存,并SD卡创建目录未能解决和bitmap内存溢出解决
1.相关代码: 加入权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ...
- Spring IOC之基于JAVA的配置
基础内容:@Bean 和 @Configuration 在Spring中新的支持java配置的核心组件是 @Configuration注解的类和@Bean注解的方法. @Bean注解被用于表明一个方法 ...
- vs 中一些快捷键
本文用于记录一些vs中快捷键,以便提高编程效率. 首先小坦克的博客介绍的十几个快捷键挺不错的,还有动画演示.可以跳过去看看. 自己也记录一些自己想用的吧: 1. ctr + W + E 出现error ...
- Xamarin.Android学习之应用程序首选项
Xamarin.Android学习之应用程序首选项 一.前言 任何App都会存在设置界面,如果开发者利用普通控件并绑定监听事件保存设置,这一过程会非常的枯燥,而且耗时.我们可以看到Android系统的 ...