我建有2个表:
Parents表(parent_id int(自增型),
Name varchar(50))Childs表 (child_id int(自增型),
Address varchar(50),
parent_id int(与Parents表中的parent_id列相对应) )以下是父类Parent.hbn.xml的代码<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="wangzheWebNhihernate.Parent,wangzheWebNhihernate" table="Parents">
<id type="Int32" name="ParentId" column="parent_id" unsaved-value="0">
<generator class="identity" />
</id>
<property type="String" name="Name" column="Name" length="50"/>
<set name="Childs" cascade="all" inverse="true" lazy="false"
table="Childs"sort="unsorted">
<key column="parent_id" />
<one-to-many class="wangzheWebNhihernate.Child,wangzheWebNhihernate"/>
</set>
</class>
</hibernate-mapping>以下的是子类的Child.hbm.xml代码<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="wangzheWebNhihernate.Child,wangzheWebNhihernate" table="Childs" dynamic-update="false" dynamic-insert="false">
<id type="Int32" column="child_id" unsaved-value="0" name="ChildId">
<generator class="identity" />
</id>
<property name="Address" column="Address" type="String" length="50"/>
<many-to-one
name="PParent"
column="parent_id"
class="wangzheWebNhihernate.Parent,wangzheWebNhihernate"
cascade="none"
outer-join="true"
update="true"
insert="true"
access="property"
/>
</class>
</hibernate-mapping>父类Parent的cs文件是:
public class Parent
{
private int parentId;
private string name;
private IDictionary childs = new Hashtable(); public Parent()
{
} public int ParentId
{
get { return parentId; }
set { parentId = value; }
} public string Name
{
get { return name; }
set { name = value; }
} public IDictionary Childs
{
get { return childs; }
set { childs = value; }
}
}
子类Child.cs的代码为:
public class Child
{
private int child_id;
private string address;
private Parent parent; public Child()
{
} public int ChildId
{
get { return child_id; }
set { child_id = value; }
} public string Address
{
get { return address; }
set { address = value; }
} public Parent PParent
{
get
{
if(parent == null) parent = new Parent();
return parent;
}
set
{
parent = value;
}
}
}
测试代码为:
Configuration configuration = new Configuration();
configuration.AddXmlFile(Server.MapPath("Child.hbm.xml"));
configuration.AddXmlFile(Server.MapPath("Parent.hbm.xml"));
ISessionFactory iSessionFactory = configuration.BuildSessionFactory();
ISession iSession = iSessionFactory.OpenSession();
ITransaction iTransaction = iSession.BeginTransaction(); Parent parent = new Parent();
parent.Name = "wangzhe"; Child child = new Child();
child.Address = "beijing";
child.PParent = parent; parent.Childs.Add(child,child); iSession.Save(parent);
iTransaction.Commit();
iSession.Close();
可是在保存的时候有错误,错误是Could not save object,这是为什么呀?
Parents表(parent_id int(自增型),
Name varchar(50))Childs表 (child_id int(自增型),
Address varchar(50),
parent_id int(与Parents表中的parent_id列相对应) )以下是父类Parent.hbn.xml的代码<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="wangzheWebNhihernate.Parent,wangzheWebNhihernate" table="Parents">
<id type="Int32" name="ParentId" column="parent_id" unsaved-value="0">
<generator class="identity" />
</id>
<property type="String" name="Name" column="Name" length="50"/>
<set name="Childs" cascade="all" inverse="true" lazy="false"
table="Childs"sort="unsorted">
<key column="parent_id" />
<one-to-many class="wangzheWebNhihernate.Child,wangzheWebNhihernate"/>
</set>
</class>
</hibernate-mapping>以下的是子类的Child.hbm.xml代码<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="wangzheWebNhihernate.Child,wangzheWebNhihernate" table="Childs" dynamic-update="false" dynamic-insert="false">
<id type="Int32" column="child_id" unsaved-value="0" name="ChildId">
<generator class="identity" />
</id>
<property name="Address" column="Address" type="String" length="50"/>
<many-to-one
name="PParent"
column="parent_id"
class="wangzheWebNhihernate.Parent,wangzheWebNhihernate"
cascade="none"
outer-join="true"
update="true"
insert="true"
access="property"
/>
</class>
</hibernate-mapping>父类Parent的cs文件是:
public class Parent
{
private int parentId;
private string name;
private IDictionary childs = new Hashtable(); public Parent()
{
} public int ParentId
{
get { return parentId; }
set { parentId = value; }
} public string Name
{
get { return name; }
set { name = value; }
} public IDictionary Childs
{
get { return childs; }
set { childs = value; }
}
}
子类Child.cs的代码为:
public class Child
{
private int child_id;
private string address;
private Parent parent; public Child()
{
} public int ChildId
{
get { return child_id; }
set { child_id = value; }
} public string Address
{
get { return address; }
set { address = value; }
} public Parent PParent
{
get
{
if(parent == null) parent = new Parent();
return parent;
}
set
{
parent = value;
}
}
}
测试代码为:
Configuration configuration = new Configuration();
configuration.AddXmlFile(Server.MapPath("Child.hbm.xml"));
configuration.AddXmlFile(Server.MapPath("Parent.hbm.xml"));
ISessionFactory iSessionFactory = configuration.BuildSessionFactory();
ISession iSession = iSessionFactory.OpenSession();
ITransaction iTransaction = iSession.BeginTransaction(); Parent parent = new Parent();
parent.Name = "wangzhe"; Child child = new Child();
child.Address = "beijing";
child.PParent = parent; parent.Childs.Add(child,child); iSession.Save(parent);
iTransaction.Commit();
iSession.Close();
可是在保存的时候有错误,错误是Could not save object,这是为什么呀?
parent.Name = "wangzhe"; Child child = new Child();
child.Address = "beijing";
child.PParent = parent; parent.Childs = child; //改成这样行么?
iSession.Save(parent);
iTransaction.Commit();
iSession.Close();
parent.Childs.Add(child,child);,一个是键值,一个是值
<bag name="TheChilds" inverse="true" cascade="all-delete-orphan">
<key column="parentID" />
<one-to-many class="Childs, YourNameSpace" />
</bag> parent.cs private System.Collections.IList theChilds =new ArrayList(); public System.Collections.IList TheChilds {
get {
return theChilds;
}
set {
theChilds=value;
}
}这样就可以直接将
parent.Childs = child;
<set name="Childs" cascade="all" inverse="true" lazy="false"
table="Childs"sort="unsorted">
<key column="parent_id" />
<one-to-many class="wangzheWebNhihernate.Child,wangzheWebNhihernate"/>
</set>
把标记set改成bag
第二处是在parent.cs中
private System.Collections.IList theChilds =new ArrayList();
//原来写的是private IDictionary childs = new Hashtable();
public System.Collections.IList TheChilds {
get
{
return theChilds;
}
set
{
theChilds=value;
}
}
//原来写的是
public IDictionary myChilds
{
get { return childs; }
set { childs = value; }
}
就改了这么两处,剩下的和最上面我发的帖子里的内容一样.
还有就是我给你加100分拉,我的msn是[email protected],有空的话加我,咱们有时间多交流