zoukankan      html  css  js  c++  java
  • NHibernate中的manytomany关系示范(转)

    NHibernate中的many-to-many关系示范

    1. 生成数据库
    CODE:

    use master
    go
    create database Hibernate
    go
    use Hibernate
    go

    create table Users (user_id int identity primary key, name varchar(100))
    go

    create table Groups(group_id int identity primary key, name varchar(100), description varchar(100))
    go

    create table UserGroups (group_id int foreign key references Groups(group_id),
    user_id int foreign key references Users(user_id))
    go



    2. User.cs

    CODE:

    using System;
    using System.Collections;

    public class User {

      public User() {
      }

      public int UserId
      {
        get { return userId; }
        set { userId = value; }
      }

      public string Name
      {
        get { return name; }
        set { name = value; }
      }

      public IList Groups
      {
        get { return groups; }
        set { groups = value; }
      }

      private int userId;
      private string name;
      private IList groups = new ArrayList();

    } //class User



    3. Group.cs

    CODE:

    using System;
    using System.Collections;

    public class Group {

      public Group() {
      }

      public int GroupId
      {
        get { return groupId; }
        set { groupId = value; }
      }

      public string Name
      {
        get { return name; }
        set { name = value; }
      }

      public string Description
      {
        get { return description; }
        set { description = value; }
      }

      public IList Users
      {
        get { return users; }
        set { users = value; }
      }

      private int groupId;
      private string name;
      private string description;
      private IList users = new ArrayList();

    } //class Group


    4. User.hbm.xml

    CODE:

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
    <class name="User, UserGroup" table="users">
    <id name="UserId" column="user_id" type="Int32"

    unsaved-value="0">
      <generator class="identity" />
    </id>
    <property name="Name" column= "name" type="String"/>
    <bag name="Groups" table="UserGroups" inverse="true">
         <key column="user_id" />
       <many-to-many column="group_id" class="Group,

    UserGroup" />
    </bag>
    </class>
    </hibernate-mapping>



    5. Group.hbm.xml

    CODE:

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
    <class name="Group, UserGroup" table="groups">
    <id name="GroupId" column="group_id" type="Int32"

    unsaved-value="0">
      <generator class="identity" />
    </id>
    <property name="Name" column= "name" type="String"/>
    <property name="Description" column= "description"

    type="String"/>
    <bag name="Users" table="UserGroups">
         <key column="group_id" />
       <many-to-many column="user_id" class="User, UserGroup"

    />
    </bag>
    </class>
    </hibernate-mapping>



    6. TestUser.cs

    CODE:

    using System;
    using NHibernate;
    using NHibernate.Cfg;
    using System.Text;
    using System.Collections;
    using NHibernate.Expression;

    public class TestCreate
    {
       ISession session;

       public TestCreate()
       {

       Configuration cfg = new Configuration();

       cfg.AddXmlFile("User.hbm.xml");
       cfg.AddXmlFile("Group.hbm.xml");

       ISessionFactory factory = cfg.BuildSessionFactory();
       session = factory.OpenSession();
       }

    public void Test()
    {
      User user1 = new User();
      user1.Name = "test1";
      User user2 = new User();
      user2.Name = "test2";

      Group group1 = new Group();
      group1.Name = "group1";
      Group group2 = new Group();
      group2.Name = "group2";

      user1.Groups.Add( group2);
      user2.Groups.Add( group1 );
      group1.Users.Add( user2 );
      group2.Users.Add( user1);

      ITransaction trans = null;
      try {
        trans = session.BeginTransaction();

        session.Save( user1 );
        session.Save( user2 );
        session.Save( group1 );
        session.Save( group2 );

        trans.Commit();
      }
      catch ( Exception e ) {
        if ( trans != null ) trans.Rollback();
        throw e;
      }
      finally {
        session.Close();
      }

    }

       static void Main()
       {
           TestCreate tc = new TestCreate();
           tc.Test();
       }

    }


    7. TestUser.exe.config

    CODE:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
          <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System,

    Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" />
          <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>

    <nhibernate>
    <add
      key="hibernate.connection.provider"      
      value="NHibernate.Connection.DriverConnectionProvider"
    />
    <add
      key="hibernate.dialect"              
      value="NHibernate.Dialect.MsSql2000Dialect"
    />
    <add
      key="hibernate.connection.driver_class"      
      value="NHibernate.Driver.SqlClientDriver"
    />
    <add
      key="hibernate.connection.connection_string"
      value="Server=localhost;initial catalog=hibernate;Integrated Security=SSPI"
    />
    <add key="hibernate.show_sql" value="true" />
    </nhibernate>
    <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] -%m%n" />
      </layout>
      <root>
      <level value="INFO" />
      <appender-ref ref="ConsoleAppender" />
      </root>
    </appender>
    </log4net>
    </configuration>


    8. UserGroup.dll

    csc /t:library /out:UserGroup.dll User.cs Group.cs

    9. TestUser.exe

    csc /r:Nhibernate.dll,UserGroup.dll TestUser.cs

    10. runtime assemblies needed

    HashCodeProvider.dll
    Iesi.Collections.dll
    log4net.dll
    NHibernate.dll

  • 相关阅读:
    Quartz Cron表达式详解
    面向对象设计的SOLID原则
    JDK动态代理Demo代码,简单易懂
    <x:forEach/>遍历RSS新闻
    <x:parse/>获取RSS新闻
    fn:length()方法
    使用一个map映射出两个对象,再把两者关系对应起来
    用户注册_发邮件,激活
    ajax 的json联动
    封装ajax小工具:
  • 原文地址:https://www.cnblogs.com/kedach/p/1283189.html
Copyright © 2011-2022 走看看