Hello,
I have a master and detail tables. There is one record in master and 3 records of its detail.
I'm using arrays. I can't use list - collection types because I'm using these classes in web service, and collection types are not deserializable.
When I select a master record, nhibernate sets 4 record to Details array and first of them is null...
Have you got any idea about it?
Table definitions
Code:
Create table Master(
Id int,
MasterName nvarchar(50)
)
Create table Detail(
Id int,
MasterId int,
DetailExp nvarchar(50)
)
And corresponding classes:Code:
public class Master
{
private Detail[] _Details;
private int _Id;
private string _MasterName;
public Detail[] Details
{
get
{
return _Details;
}
set { _Details = value; }
}
public int Id
{
get { return _Id; }
set { _Id = value; }
}
public string MasterName
{
get { return _MasterName; }
set { _MasterName = value; }
}
}
public class Detail
{
private string _DetailExp;
private int _Id;
public string DetailExp
{
get { return _DetailExp; }
set { _DetailExp = value; }
}
public int Id
{
get { return _Id; }
set { _Id = value; }
}
}
Mapping Files:
Master.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" schema="dbo" default-cascade="save-update" auto-import="true">
<class name="WSTest.Entities.Master, WSTest" lazy="false" table="Master">
<id name="Id" type="int" column="Id" access="field.pascalcase-underscore">
<generator class="native" />
</id>
<array name="Details" cascade="all-delete-orphan" access="field.pascalcase-underscore" >
<key column="MasterId" />
<index column="Id"/>
<one-to-many class="WSTest.Entities.Detail,WSTest" />
</array>
<property name="MasterName" column="MasterName" access="field.pascalcase-underscore" not-null="true" />
</class>
</hibernate-mapping>
Detail.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" schema="dbo" default-cascade="save-update" auto-import="true">
<class name="WSTest.Entities.Detail, WSTest" lazy="false" table="Detail">
<id name="Id" type="int" column="Id" access="field.pascalcase-underscore">
<generator class="native" />
</id>
<property name="DetailExp" column="DetailExp" access="field.pascalcase-underscore" not-null="true" />
</class>
</hibernate-mapping>
Data in tables:
select * from Master,Detail where detail.MasterId = Master.Id
Id MasterName Id MasterId DetailExp
1 Master1 1 1 Detail1
1 Master1 2 1 Detail2
1 Master1 3 1 Detail3
Web Service output:
- <Master>
- <Details>
<Detail xsi:nil="true" />
- <Detail>
<DetailExp>Detail1</DetailExp>
<Id>1</Id>
</Detail>
- <Detail>
<DetailExp>Detail2</DetailExp>
<Id>2</Id>
</Detail>
- <Detail>
<DetailExp>Detail3</DetailExp>
<Id>3</Id>
</Detail>
</Details>
<Id>1</Id>
<MasterName>Master1</MasterName>
</Master>
- <Master>
<Details />
<Id>2</Id>
<MasterName>Master2</MasterName>
</Master>
Thanks in advance