博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nhibernate与Castle windsor (个人学习笔记1)
阅读量:4520 次
发布时间:2019-06-08

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

 

 

参考了李会京老师的:Nihibernate 系列教程

与网络上的Castle文章  这里做一个整合!

首先先创建一个项目 先来看一下项目的结构!

 

看名字就应该知道是做什么的把!

Mode:当然就是做存放数据库实体映射的表啦,与表映射的关系! 那么要这么映射呢,这时 我们的Nhibernate就要大显身手了!

用到了 Nhibernate的 CodeFirst  以前咱们配置表关系的文件是XML 现在不用啦!  我门可以写成类文件!

导入:Nhibernate.dll、Iesi.Collections

以Northwind 数据库为例子!

这里只做一张客户表:

using System;

namespace Mode
{

    [Serializable]

    public class Customers
    {

        public virtual string CustomerID { get; set; }

        public virtual string CompanyName { get; set; }
        public virtual string ContactName { get; set; }
        public virtual string ContactTitle { get; set; }
        public virtual string Address { get; set; }
        public virtual string City { get; set; }
        public virtual string Region { get; set; }
        public virtual string PostalCode { get; set; }
        public virtual string Country { get; set; }
        public virtual string Phone { get; set; }
        public virtual string Fax { get; set; }

    }
}

Maaping:

using NHibernate;

using NHibernate.Mapping.ByCode;
using NHibernate.Mapping.ByCode.Conformist;
using Mode.Entity;

namespace Mode.Mapping

{
    public class Customers_Mapping : ClassMapping<Customers>
    {
        public Customers_Mapping()
        {
            Id(ec => ec.CustomerID, em =>
            {
                em.Column("CustomerID");
                em.Generator(Generators.Assigned);
                em.Length(5);
            });

 

            Property(column => column.CompanyName, em => { em.Type(NHibernateUtil.String); em.Column("CompanyName"); em.Length(40); });

            Property(column => column.ContactName, em => { em.Type(NHibernateUtil.String); em.Column("ContactName"); em.Length(30); });

            Property(column => column.ContactTitle, em => { em.Type(NHibernateUtil.String); em.Column("ContactTitle"); em.Length(30); });
            Property(column => column.Address, em => { em.Type(NHibernateUtil.String); em.Column("Address"); em.Length(60); });
            Property(column => column.City, em => { em.Type(NHibernateUtil.String); em.Column("City"); em.Length(15); });
            Property(column => column.Region, em => { em.Type(NHibernateUtil.String); em.Column("Region"); em.Length(15); });
            Property(column => column.PostalCode, em => { em.Type(NHibernateUtil.String); em.Column("PostalCode"); em.Length(10); });
            Property(column => column.Country, em => { em.Type(NHibernateUtil.String); em.Column("Country"); em.Length(15); });
            Property(column => column.Phone, em => { em.Type(NHibernateUtil.String); em.Column("Phone"); em.Length(24); });
            Property(column => column.Fax, em => { em.Type(NHibernateUtil.String); em.Column("Fax"); em.Length(24); });

        }

    }
}

看不懂?别急我来给你看下一段代码你就明白了! 现在我们先把事做完了! 现在我们要添加Mapiing里得映射关系到Hibnernate中至少得让Hibernate知道怎么映射的把?

     private static readonly ModelMapper mapper = new ModelMapper();

        static ClassMappingService()
        {
            MappingTableEntities();
        }

        public static HbmMapping GetMapping()
        {
            return mapper.CompileMappingForAllExplicitlyAddedEntities();    //当你调用mapper.CompileMappingForAllExplicitlyAddedEntities().AsString()方法你会发现其中的奥秘!其实他就是把这个输出成XML文件 映射。 如果还不懂 去看看李会京老师的文章
        }

        public static void MappingTableEntities()
        {
            mapper.AddMapping<Customers_Mapping>();  //如果有多个一直调用AddMapping方法
        }

解释下这个类的方法把

ModelMapper提供一种基本映射方式:使用Class方法对实体类特定映射:

最后调用CompileMappingForAllExplicitAddedEntities方法显式所有映射的实体(这里是Customers)编译为HbmMapping对象并输出,也可以使用CompileMappingFor方法指定实体类型。   HbmMapping对象如果有看源代码的人~就会明白 其他他是通过序列化成一个XML的!  

 

好多要写啊~先写这么多~ 第一次写笔记~如果我有什么理解错误的,请前辈门指教~ 让园里的前辈见笑了~

本文参考N多文章,就不一一感谢了!!!!!

转载于:https://www.cnblogs.com/zhangjiawen/archive/2012/03/17/2402943.html

你可能感兴趣的文章
【C++】继承时构造函数和析构函数
查看>>
shader一些语义或术语的解释
查看>>
opencv源代码之中的一个:cvboost.cpp
查看>>
Android通过泛型简化findViewById类型转换
查看>>
swift
查看>>
eclipse maven 插件的安装和配置
查看>>
mysql基本知识总结
查看>>
php的zend引擎执行过程 一
查看>>
pycharm 快捷键
查看>>
Linux常用命令
查看>>
AutoFac IoC DI 依赖注入
查看>>
.net中的设计模式---单例模式
查看>>
安装程序工具 (Installutil.exe)22
查看>>
python 学习(pip工具的安装)
查看>>
博客园在我的博客添加点击小心心特效
查看>>
如何简单解释 MapReduce算法
查看>>
微软Office Online服务安装部署(二)
查看>>
从 0 到 1 实现 React 系列 —— 1.JSX 和 Virtual DOM
查看>>
面向接口编程详解(二)——编程实例
查看>>
解决java.lang.NoClassDefFoundError: org/apache/log4j/Level
查看>>