欢迎访问欧博亚洲(Allbet Game)!

首页科技正文

唐山工业职业技术学院:C# 数据操作系列 - 10 NHibernate初试

admin2020-05-2053

0. 前言

在上一篇基本讲完了EF Core的入门级教程。从这一篇最先,我们试着去探索一下 .net core平台上更多的ORM框架。那么,这一篇最先我们就来试试NHibernate。

1. NHibernate 先容

NHibernate是Hibernate的C#版,众所周知Hibernate是Java 里ORM的顶梁柱(至少曾经)。Hibernate可以说开拓了Java的天下,昔时SSH三驾马车风靡天下,至今Hibernate都发挥着举足轻重的作用。

不外,与EntityFramework差别的地方是,Hibernate以设置文件为主,通过设置文件规范使用,Object/Relation 映射。而NHibernate这继续了这一点,也是以设置文件优先。下图是 NHibernate的事情原理:

通过读取App.config或者Web.config文件去读NHibernate的基本设置,然后加载映射文件,确立映射关系。在后续使用中,通过映射关系天生SQL语句(这一步跟EF是一致的),进而操作数据或者查询数据。

2. 初探 NHibernate

2.1 准备

先来个控制台项目,我起名为dataprovider。然后安装NHibernate:

  1. NuGet:
Install-Package NHibernate
  1. dotnet core 命令行:
dotnet add package NHibernate

这个文章中使用的NHibernate版本是 5.2.7

2.2 设置

需要建立一个项目用的设置文件:App.config.

C# 项目中,除了Web类型的项目,每个项目的主设置文件的名称都是App.config,这是一个牢固名称。

文件内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
</configuration>

在 configuration节点之间添加以下内容:

<configSections>
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
  </configSections>

这段代码的寄义是,在config文件中添加一个 hibernate-configuration结点,结点的剖析由类:NHibernate.Cfg.ConfigurationSectionHandler,所在包是NHibernate。

在App.config文件configuration结点中添加以下代码:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
        <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
        <property name="connection.connection_string">
            Data Source=.;Initial Catalog=Demo;Integrated Security=True
        </property>
        <property name="hbm2ddl.auto">create-drop</property>
        <mapping assembly="dataprovider" />
    </session-factory>
</hibernate-configuration>

这是牢固花样,其中dialect示意使用的数据库类型,connection.connection_string 示意毗邻字符串。mapping示意映射关系文件所在项目。

2.3 获取ISessionFactory

然后获取一个ISessionFactory:

Configuration cfg = new Configuration();
var sessionFactory = cfg.BuildSessionFactory();

固然,若是直接运行代码的话,会在 BuildSessionFactory这里报错。由于没有为SQL Server安装数据接见驱动:

System.Data.SqlClient

将数据接见驱动安装乐成后,运行可以获得sessionFactory。

sessionFactory用来建立一个接见数据库的Session

2.4 增删改查

先来个简朴的示例类:

public class Cat
{
    public virtual string Id { get; set; }
    public virtual string Name { get; set; }
    public virtual char Sex { get; set; }
    public virtual float Weight { get; set; }
}

NHibernate的映射关系文件:Cat.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="dataprovider" assembly="dataprovider">
  <class name="Cat" table="Cat">

    <!-- A 32 hex character is our surrogate key. It's automatically
            generated by NHibernate with the UUID pattern. -->
    <id name="Id">
      <column name="CatId" sql-type="char(32)" not-null="true"/>
      <generator class="uuid.hex" />
    </id>
    <!-- A cat has to have a name, but it shouldn't be too long. -->
    <property name="Name">
      <column name="Name" length="16" not-null="true" />
    </property>
    <property name="Sex" />
    <property name="Weight" />
  </class>
</hibernate-mapping>

建立完成后,右键选中文件,修改文件天生操作为嵌套的资源

然后编写实例代码:

Configuration cfg = new Configuration().Configure();

using (var sessionFactory = cfg.BuildSessionFactory())
using (var session = sessionFactory.OpenSession())
{
// 通过session操作
    session.Close();
}

新增一个Cat:

var princess = new Cat
{
    Name = "Princess",
    Sex = 'F',
    Weight = 7.4f
};
session.Save(princess);
session.Flush();//推送修改给数据库,不挪用的话数据库里将没有数据

查询并修改:

var cats = session.Query<Cat>().ToList();
var cat = cats.First();
cat.Name = "xiao li";
session.Update(cat);
session.Flush();

查询并删除:

var cats = session.Query<Cat>().ToList();
var cat = cats.First();
session.Delete(cat);
session.Flush();

这是NHibernate的入门级的入门教程。嗯,给人人一个NHibernate的图:

3. 总结

NHibernate延续了Hibernate的优点,若是之前领会过Hibernate的人上手不难。轻量简朴,不外得需要设置文件。下一期将率领人人继续深入研究NHibernate。

更多内容烦请关注我的博客《高先生小屋》

唐山工业职业技术学院:C# 数据操作系列 - 10 NHibernate初试 第1张

,

Sunbet 申博

Sunbet 申博在2019年立足亚太,寻求业界翘楚合作运营线上游戏平台。Sunbet www.jxadap.com自与江西安达安全评价咨询有限责任公司合作以来,优势互补、资源整合、在未来一定会用心运营,赢得每位代理、会员的口碑。

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源:欧博亚洲(Allbet Game)!

本文链接:http://www.czshenhaifb.com/post/1150.html

最新评论

  • Usappledeveloperaccountsforsale 09/25 说:

    欧博亚洲APP下载欢迎进入欧博亚洲APP下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。很有品质

  • Usappledeveloperaccountsforsale 09/25 说:

    欧博亚洲APP下载欢迎进入欧博亚洲APP下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。很有品质

  • 皇冠APP下载 09/25 说:

    联博以太坊高度www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。众口难调,我打80分

  • 欧博官网手机版 09/24 说:

    联博www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。可以多写点吗

  • UG环球客户端下载 09/24 说:

    Allbet开户欢迎进入Allbet开户(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。没我想象的虐

  • 欧博官网手机版 09/23 说:

    Allbet官网欢迎进入Allbet官网(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。别结局,我还想一直看

  • Allbet手机版下载 09/22 说:

    www.allbetgaming.net欢迎进入欧博平台网站(www.aLLbetgame.us),www.aLLbetgame.us开放欧博平台网址、欧博注册、欧博APP下载、欧博客户端下载、欧博游戏等业务。走心的夸你

  • 联博接口 09/21 说:

    联博APIwww.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。啦啦啦,我来看啦~