参考:http://www.cnblogs.com/jillzhang/archive/2007/04/01/686079.html
自己修改了一下,原来的(Nhibernate)版本旧了!
MUser:
-------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
namespace Model3
{
public class MUser
{
private int userId;
private string name;
private IList groups = new ArrayList();
public MUser() {}
public virtual int UserId
{
get { return userId; }
set { userId = value; }
}
public virtual string Name
{
get { return name; }
set { name = value; }
}
public virtual IList Groups
{
get { return groups; }
set { groups = value; }
}
}
}
-------------------------------------------------------------------
User.hbm.xml
-------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Model3.MUser, Model3" table="Musers">
<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="MUserGroups" inverse="true">
<key column="user_id" />
<many-to-many column="group_id" class="Model3.Group, Model3" />
</bag>
</class>
</hibernate-mapping>
-------------------------------------------------------------------
Group.cs
-------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace Model3
{
public class Group
{
private int groupId;
private string name;
private string description;
private IList users = new ArrayList();
public Group()
{
}
public virtual int GroupId
{
get { return groupId; }
set { groupId = value; }
}
public virtual string Name
{
get { return name; }
set { name = value; }
}
public virtual string Description
{
get { return description; }
set { description = value; }
}
public virtual IList Users
{
get { return users; }
set { users = value; }
}
} //class Group
}
------------------------------------------------------
Group.hbm.xml
-----------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Model3.Group, Model3" 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="MUserGroups">
<key column="group_id" />
<many-to-many column="user_id" class="Model3.MUser, Model3" />
</bag>
</class>
</hibernate-mapping>
------------------------------------------------
测试页面:
------------------------------------------------
public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Test();
}
public void Test()
{
ISession session = Common.SessionFactory.OpenSession("Model3");
MUser user1 = new MUser();
user1.Name = "test1";
MUser user2 = new MUser();
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();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
ISession session = Common.SessionFactory.OpenSession("Model3");
MUser u = new MUser();
u.Name = "test6";
ITransaction trans = session.BeginTransaction();
session.Save(u);
trans.Commit();
session.Close();
}
protected void Button2_Click(object sender, EventArgs e)
{
ISession session = Common.SessionFactory.OpenSession("Model3");
Group g = new Group();
g.Name = "group8";
ITransaction trans = session.BeginTransaction();
session.Save(g);
trans.Commit();
session.Close();
}
}