Una bag vuota

4 views
Skip to first unread message

Giulio Petrucci

unread,
Feb 15, 2012, 5:01:24 AM2/15/12
to nh...@googlegroups.com
Buongiorno a tutti,

Ecco il mio dominio:

public class Structure
{
public virtual string Id { get; set; }
public virtual IList<CorporateContact> Contacts { get; set; }
}

public abstract class Contact
{
public virtual Int64 Id { get; set; }
public virtual string Name { get; set; }
}

public class CorporateContact : Contact
{
//...
}

e qui c'è il mapping:

<class name="Structure" table="vStructure" lazy="false">
<id name="Id" column="Id"/>
<bag name="Contacts" table="vCorporateContact" cascade="none" lazy="false">
<key column="Pertinence"/>
<one-to-many class="CorporateContact"/>
</bag>
</class>
<class name="Contact" table="Contact" abstract="true" polymorphism="implicit">
<id name="Id">
<column name="Id"/>
<generator class="identity"/>
</id>
</class>
<joined-subclass name="CorporateContact" table="vCorporateContact"
extends="Contact" abstract="false">
<key column="Id"/>
<property name="Name" column="Name"/>
</joined-subclass>

sia la tabella vStructure che vCorporateContact sono VIEW, ma dato che
le operazioni che compio su di esse sono solo in lettura, credo che
questo non comporti nulla. Inoltre, faccio notare che la colonna
'Pertinence' nella vCorporateContact non è mappata su nessuna property
e non contiene una vera foreign key all'Id della view vStructure (non
è colpa mia, sto lavorando su un tristissimo db legacy). Quando
seleziono una Structure, vengono generate queste due query (dalle
quali ho rimosso i parametri, esplicitandoli):

SELECT
structure0_.Id as Id0_0_,
FROM vStructure structure0_
WHERE structure0_.Id = '011300'

SELECT
pertaining0_.Pertinence as Pertinence1_,
pertaining0_.Id as Id1_,
pertaining0_.Id as Id1_0_,
pertaining0_.Name as Name2_0_,
FROM vCorporateContact pertaining0_
inner join
Contact pertaining0_1_
on pertaining0_.Id = pertaining0_1_.Id
WHERE pertaining0_.Pertinence = '011300'

Incollando la seconda query nella management console di SQL server,
ottengo 1 record che è il risultato atteso. Ma eseguendo il seguente
snippet di codice:

ISessionFactory sf = ...;
using (var s = sf.OpenSession())
{
var x = s.Get<Structure>('011300');
var count = x.Contacts.Count();
}

ottengo che la variabile 'count' vale ZERO e la collection
Structure.Contacts è effettivamente vuota.

Qualcuno può darmi una mano?

Grazie in anticipo e buona giornata,
Giulio

--

Reply all
Reply to author
Forward
0 new messages