热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NHibernate会话工厂管理器详解

本文介绍了NHibernate中通过定义接口和实现类来管理会话工厂的方法,包括接口的优势、模型文件夹的结构以及具体的代码示例。
### 定义接口的优势
1. **清晰的方法视图**:通过接口可以清晰地看到需要实现哪些方法,便于理解和维护。
2. **灵活的实现切换**:接口允许不同的实现类,使得系统更加灵活,易于扩展和测试。

### 项目结构
项目通常包含三个主要文件夹:
- **Model**:存放实体类,每个类对应数据库中的一张表。
- **Mappings**:存放映射文件,用于将实体类的属性与数据库表的列进行关联。
- **Manager**:存放接口及其实现类,负责业务逻辑的实现。

#### Model 文件夹
在 `Model` 文件夹中,每个类对应数据库中的一张表。例如,`Unity` 类对应 `unity` 表。

```csharp
using System;

namespace NBOWeb.Model {
public class Unity {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int Age { get; set; }
public virtual int WorkAge { get; set; }
}
}
```

#### Mappings 文件夹
在 `Mappings` 文件夹中,每个映射文件对应一个实体类,确保类的属性与数据库表的列正确对应。

```xml

assembly="NBOWeb"
namespace="NBOWeb.Model">









```

#### Manager 文件夹
在 `Manager` 文件夹中,定义了接口和其实现类,负责业务逻辑的实现。

##### 接口定义

```csharp
using System.Collections.Generic;
using NBOWeb.Model;

namespace NBOWeb.Manager {
public interface IUnityManager {
void Add(Unity unity);
void Update(Unity unity);
void Remove(Unity unity);
Unity GetById(int id);
Unity GetByName(string name);
ICollection GetAllUnityCollection();
bool VerifyUnity(string name, int age);
}
}
```

##### 接口实现

```csharp
using System.Collections.Generic;
using NHibernate;
using NHibernate.Criterion;
using NBOWeb.Model;

namespace NBOWeb.Manager {
public class UnityManager : IUnityManager {
public void Add(Unity unity) {
using (ISession session = NHibernateHelper.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
session.Save(unity);
transaction.Commit();
}
}
}

public ICollection GetAllUnityCollection() {
using (ISession session = NHibernateHelper.OpenSession()) {
return session.CreateCriteria(typeof(Unity)).List();
}
}

public Unity GetById(int id) {
using (ISession session = NHibernateHelper.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
return session.Get(id);
}
}
}

public Unity GetByName(string name) {
using (ISession session = NHibernateHelper.OpenSession()) {
return session.CreateCriteria(typeof(Unity))
.Add(Restrictions.Eq("Name", name))
.UniqueResult();
}
}

public void Remove(Unity unity) {
using (ISession session = NHibernateHelper.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
session.Delete(unity);
transaction.Commit();
}
}
}

public void Update(Unity unity) {
using (ISession session = NHibernateHelper.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
session.Update(unity);
transaction.Commit();
}
}
}

public bool VerifyUnity(string name, int age) {
using (ISession session = NHibernateHelper.OpenSession()) {
Unity unity = session.CreateCriteria(typeof(Unity))
.Add(Restrictions.Eq("Name", name))
.Add(Restrictions.Eq("Age", age))
.UniqueResult();
return unity != null;
}
}
}
}
```

### NHibernateHelper 类
`NHibernateHelper` 类负责管理会话工厂的创建和打开会话。

```csharp
using NHibernate;
using NHibernate.Cfg;

namespace NBOWeb {
public class NHibernateHelper {
private static ISessionFactory _sessionFactory;

private static ISessionFactory SessionFactory {
get {
if (_sessiOnFactory== null) {
var cOnfiguration= new Configuration();
configuration.Configure();
configuration.AddAssembly("NBOWeb");
_sessiOnFactory= configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}

public static ISession OpenSession() {
return SessionFactory.OpenSession();
}
}
}
```

### 总体运行示例
下面是一个简单的示例,展示如何使用 `IUnityManager` 接口进行数据操作。

```csharp
using System;
using System.Collections.Generic;
using NHibernate;
using NBOWeb.Model;
using NBOWeb.Manager;

namespace MySql_StudyTest {
class Program {
static void Main(string[] args) {
IUnityManager unityManager = new UnityManager();
Console.WriteLine(unityManager.VerifyUnity("juhnko", 30));
Console.ReadKey();
}
}
}
```

通过上述代码,我们可以看到如何利用 NHibernate 和接口来管理和操作数据库中的数据。
推荐阅读
author-avatar
Le-麦兜_738
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有