ASP.NET MVC中使用Nhibernate(二)

一,摘要

这是ASP.NET MVC中使用Nhibernate的第二部分,你也可以查看第一部分

一,多对多关联

我们将继续创建我们的Post类的映射文件,相对于Category将增加一点难度,应为我们不得不去呈现一个多对对的关系,为了达到这个目的,我们在映射文件中使用Bagyu元素,下面是Post.hbm.xml 文件的代码:

   1: 
    
    xml version="1.0" encoding="utf-8" ?>
   2:    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
   3:                                        namespace="Core.Domain.Model"
   4:                                        assembly="Core">
   5:     
   6:      <class name="Post" table="Posts" dynamic-update="true">
   7:        <cache usage="read-write"/>
   8:         <id name="Id" column="Id" type="Guid">
   9:          <generator class="guid"/>
  10:       
    
    id>
  11:       <property name="Title" length="100"/>
  12:       <property name="Body"/>
  13:       <property name="CreationDate" type="datetime"/>
  14:       <property name="IsPublic" type="bool"/>
  15:    
  16:       <bag name="Categories" table="PostCategory" lazy="false" >
  17:         <key column="idPost" >
    
    key>
  18:         <many-to-many class="Category" column="idCategory" >
    
    many-to-many>
  19:       
    
    bag>
  20:       
  21:     
    
    class>
  22:   
    
    hibernate-mapping>

bag元素包含在16-19行代码中,下面解释下上面的代码:
1.name属性是Post类的属性名,我们用来存储categories集合
2.table属性是数据库中的一个表,用来连接Post和Categories表
3.key中的column属性是Post的主键列
4.class属性是category模型的类名
5.many-to-many中的column属性是Categories的主键列
为了更好的理解这个映射文件,下面提供类图表和数据库图标:
 4 

8 

从上面看到,我们不需创建PostCategory表的类

二,测试

下面提供完整的单元测试代码:

   1: using System;
   2: using System.Text;
   3: using System.Collections.Generic;
   4: using System.Linq;
   5: using Microsoft.VisualStudio.TestTools.UnitTesting;
   6: using Core.Domain.Model;
   7: using Core.Domain.Repositories;
   8: using Core;
   9: amespace NHibernate101.Tests
  10:  
  11:    [TestClass]
  12:    public class RepositoriesTest
  13:    {
  14:        IRepository
   
   
    
     categoriesRepository;
   
   
  15:        IRepository
   
   
    
     postsRepository;
   
   
  16:        Post testPost;
  17:        Category testCategory1;
  18:        Category testCategory2;
  19:  
  20:        public RepositoriesTest()
  21:        {
  22:        }
  23:        private TestContext testContextInstance;
  24:        public TestContext TestContext
  25:        {
  26:            get
  27:            {
  28:                return testContextInstance;
  29:            }
  30:            set
  31:            {
  32:                testContextInstance = value;
  33:            }
  34:        }
  35:       [TestInitialize()]
  36:        public void CreateRepositories()
  37:        {
  38:            categoriesRepository = new CategoryRepository();
  39:            postsRepository = new PostRepository();
  40:        }
  41:       [TestMethod]
  42:        [DeploymentItem("hibernate.cfg.xml")]
  43:        public void CanCreateCategory()
  44:        {
  45:            testCategory1 = new Category() { Name = "ASP.NET" };
  46:           categoriesRepository.Save(testCategory1);
  47:  
  48:        }
  49:        [TestMethod]
  50:        [DeploymentItem("hibernate.cfg.xml")]
  51:        public void CanCreatePost()
  52:        {
  53:           testPost = new Post();
  54:            testPost.Title = "ASP.NET MVC and NHibernate";
  55:            testPost.Body = "In this article I’m going to cover how to install and configure NHibernate and use it in a ASP.NET MVC application.";
  56:            testPost.CreationDate = DateTime.Now;
  57:            testPost.IsPublic = true;
  58:            testCategory2 = new Category() { Name= "ASP.NET MVC"};
  59:            categoriesRepository.Save(testCategory2);
  60:            testPost.Categories.Add(testCategory2);
  61:            postsRepository.Save(testPost);
  62:        }
  63:    }

如果上面的测试通过,我们将在数据库中看到新的post和categoty
随下的文章中我们将继续探索!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值