博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nhibernate3循序渐进(三): 一对多映射和级联保存
阅读量:6981 次
发布时间:2019-06-27

本文共 2902 字,大约阅读时间需要 9 分钟。

我们知道, 对于数据库中的一对多关系, 我们在建表的时候, 应该在多表这里建立外键

 

我们准备这样一个场景, 大学里的系和学生, 一个系有多个学生

 

Department类和Xml如下:

 

Department.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NHibernate3.Domain
{
    
public 
class Department
    {
        
public 
virtual 
int? ID { 
get
set; }
        
public 
virtual 
string Name { 
get
set; }
    }
}

 

Department..hbm.xml

<?
xml version="1.0" encoding="utf-8" 
?>
<
hibernate-mapping 
xmlns
="urn:nhibernate-mapping-2.2"
 assembly
="NHibernate3.Domain"
 namespace
="NHibernate3.Domain"
>
  
<
class 
name
="Department"
 table
="T_Department"
 lazy
="true"
 
>
    
<
id 
name
="ID"
 type
="int"
 column
="DepartmentID"
>
      
<
generator 
class
="native"
/>
    
</
id
>
  
    
<
property 
name
="Name"
 type
="string"
>
      
<
column 
name
="Name"
 length
="50"
/>
    
</
property
>
  
</
class
>
</
hibernate-mapping
>

 

 

Student类和Xml如下:

 

Student.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NHibernate3.Domain
{
    
public 
class Student
    {
        
public 
virtual 
int? ID { 
get
set; }
        
public 
virtual 
string Name { 
get
set; }
        
public 
virtual Department Dept { 
get
set; }
    }
}

 

 

 

Student.hbm.xml

<?
xml version="1.0" encoding="utf-8" 
?>
<
hibernate-mapping 
xmlns
="urn:nhibernate-mapping-2.2"
 assembly
="NHibernate3.Domain"
 namespace
="NHibernate3.Domain"
>
  
<
class 
name
="Student"
 table
="T_Student"
 lazy
="true"
 
>
    
<
id 
name
="ID"
 type
="int"
 column
="StudentID"
>
      
<
generator 
class
="native"
/>
    
</
id
>
    
<
property 
name
="Name"
 type
="string"
>
      
<
column 
name
="Name"
 length
="50"
/>
    
</
property
>
    
<
many-to-one 
name
="Dept"
 column
="DepartmentID"
 cascade
="all"
/>
  
</
class
>
</
hibernate-mapping
>

 

 

保存和查询代码

 

ScSession.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using NHibernate3.Domain;
namespace NHibernate3.DAL
{
    
public 
class ScSession
    {
        
private ISessionFactory sessionFactory;
        
public ScSession()
        {
            
var cfg = 
new NHibernate.Cfg.Configuration().Configure(
"
Config/hibernate.cfg.xml
");
            sessionFactory = cfg.BuildSessionFactory();
        }
        
public 
void Save()
        {
            
using (ISession session = 
this.sessionFactory.OpenSession())
            {
                
var dept = 
new Department { Name = 
"
计算机系
" };
                
var student1 = 
new Student { Name = 
"
李四
", Dept = dept };
                
var student2 = 
new Student { Name = 
"
张三
", Dept = dept };
                ITransaction tran = session.BeginTransaction();
                
try
                {
                    
//
持久化Department类
                    session.Save(student1);
                    session.Save(student2);
                    tran.Commit();
                }
                
catch (Exception ex)
                {
                    tran.Rollback();
                    
throw ex;
                }
            }
        }
        
public 
void GetAll()
        {
            
using (ISession session = 
this.sessionFactory.OpenSession())
            {
                
var students = session.CreateQuery(
"
 from Student
").List<Student>();
                Console.WriteLine();
                Console.WriteLine(
"
******* 学生信息 *******
");
                
foreach (Student student 
in students)
                {
                    Console.WriteLine(
"
学生:{0}
", student.Name);
                    Console.WriteLine(
"
系:{0}
", student.Dept.Name);
                }
            }
        }
    }
}

 

运行结果:

记录保存成功!

******* 学生信息 *******

学生:李四
系:计算机系
学生:张三
系:计算机系

 

 

 

 

转载地址:http://bdjpl.baihongyu.com/

你可能感兴趣的文章
MongoDB的数据格式及数据类型
查看>>
每天学点SpringCloud(七):路由器和过滤器-Zuul
查看>>
SpringBoot 手写拦截器
查看>>
为什么我们做分布式使用Redis?
查看>>
py 决策树①
查看>>
帮您找到正确的提问渠道
查看>>
出差第二天
查看>>
JavaScript—ES6关于Promise的用法(19)
查看>>
Google发布机器学习平台Tensorflow游乐场~带你玩神经网络(转载)
查看>>
设计模式 之 访问者模式
查看>>
读到良葛格的反思"Hello World"
查看>>
曾经被微软视为毒瘤的“开源”,现在却成了“宠儿”
查看>>
VR、AR成为Facebook F8大会上最亮眼主角
查看>>
Spring4-自动装配Beans-通过注解@Autowired在Set方法上
查看>>
RAC 11.2的新特性
查看>>
2星|《金融学从入门到精通》:金融学名词解释的堆砌
查看>>
数据库四种事务隔离级别
查看>>
基于模板的excel导出
查看>>
基于Nginx负载均衡方案
查看>>
双活数据中心
查看>>