zoukankan      html  css  js  c++  java
  • NHibernate Step By Step(5)实体表现模式


    1.默认持久化类,即一个配置文件对应一个实体类了

    在JAVA世界中被称之为POJO(Plain Old Java Object).到了.net,就变成POCO(Plain Old Class Object)了,Class是我自己猜的

    我们可以通过配置默认的配置文件default_entity_mode节点来修改,EntityMode 枚举定义了三种方式.

    public enum EntityMode
    {
        Poco,
        Map,
        Xml
    }

    2.动态模型

    意图是创建实体映射文件,但不创建实体类(不是有实体类,不创建映射文件,实际上我好想这样…),好处就是不用创建实体类,可带来一些灵活性

    如下配置文件 class节点不再指定table而是entity-name,做法是以Map的key,value方式来实现

    <class entity-name="ProductLine">
      <id name="Id" column="productId" type="System.Int32">
        <generator class="native"/>
      </id>
      <property name="Description" not-null="true" length="200" type="string"/>
    
      <bag name="Models" cascade="all" inverse="true">
        <key column="productId"/>
        <one-to-many class="Model"/>
      </bag>
    
    </class>
    <class entity-name="Model">
      <id name="Id" column="modelId" type="System.Int32">
        <generator class="native"/>
      </id>
    
      <property name="Name" not-null="true" length="25" type="string"/>
      <property name="Description" not-null="true" length="200" type="string"/>
      <many-to-one name="ProductLine" column="productId" not-null="true" class="ProductLine"/>
    
    </class>

    我们还是看代码吧

    (1)首先当然是修改默认实体表现模式了
    configuration.SetProperty(Environment.DefaultEntityMode, EntityModeHelper.ToString(EntityMode.Map));

    (2)数据操作方法
    IDictionary 接口来操作,保存的时候需要保存对象的名字需要与entity-name相同


    IDictionary cars;
    IList models;
    using (ISession s = OpenSession())
    {
        t = s.BeginTransaction();
    
        cars = new Hashtable();
        cars["Description"] = "Cars";
    
        IDictionary monaro = new Hashtable();
        monaro["ProductLine"] = cars;
        monaro["Name"] = "Monaro";
        monaro["Description"] = "Holden Monaro";
    
        IDictionary hsv = new Hashtable();
        hsv["ProductLine"] = cars;
        hsv["Name"] = "hsv";
        hsv["Description"] = "Holden hsv";
    
        models = new List<IDictionary> {monaro, hsv};
    
        cars["Models"] = models;
    
        s.Save("ProductLine", cars);
        t.Commit();
    }


    3.以XML做数据库

    之前就有听说hibernate要支持这个功能,就不知不觉有了这个功能了,也不知道这个怎么样,我们常要读取xml文件,但又想以实体方式获取,这样就得一个个属性的赋值给实体,若实现与xml映射的话,就免了这个过程了,但我相信肯定会添加了其他的复杂度,这个功能暂时用到的不多,就不写了.

    hibernate转到.net平台的移植度还是非常的高的,几乎一样了

  • 相关阅读:
    Nginx的configure各项中文说明
    nginx+keepalived高可用及双主模式
    nginx实现请求的负载均衡 + keepalived实现nginx的高可用
    Keepalived详细介绍简介
    keepalived vip漂移基本原理及选举算法
    keepalived脑裂问题查找
    计算机网络的三种通讯模式(单播,广播,组播)
    二层交换机、三层交换机、路由器
    Linux /var/log下的各种日志文件详解
    报文、帧、数据包等的区别
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1537203.html
Copyright © 2011-2022 走看看