2009-07-06 6 views
0

Ich habe eine Elternklasse, die ein untergeordnetes Objekt enthält. Ich verwende set, um das untergeordnete Objekt zu speichern, wenn das übergeordnete Element gespeichert wird. Ich bin nicht sicher, ob set nur zum Speichern eines untergeordneten Objekts verwendet wird. Und im diesen Fehler unterInvalidcastexception Fehler bei der Verwendung von Set oder Bag Cascading

System.InvalidCastException: Kann nicht das Objekt des Typs ‚x‘ werfen

Hat jemand kennt die Lösung ‚Iesi.Collections.ISet‘ eingeben.

<class name="Customer" table="Customers" lazy="false" dynamic-update="true"> 

    <id name="Id" column="CustomerID" type="Guid" > 
    <generator class="guid.comb" /> 
    </id> 

    <property name="Name" column="CustomerName" type="String" length="50" not-null="true" /> 

<bag name="users" table="Users" cascade="all-delete-orphan"> 
    <key column="CustomerID" /> 
    <one-to-many class="User" /> 
</bag> 

<set name="customerPreferences" table="Preferences" cascade="all-delete-orphan"> 
    <key column="CustomerID" /> 
    <one-to-many class="CustomerPreferences" /> 
</set> 

</class> 

Entity Klasse: public class Kunde { privaten Guid _id; private Zeichenfolge _name; private IList _users = new List(); private CustomerPreferences _customerPreferences;

public Guid Id 
    { 
     get { return _id; } 
     set { _id = value; } 
    } 

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

    public CustomerPreferences CustomerPreferences 
    { 
     get { return _customerPreferences; } 
     set { _customerPreferences = value; } 
    } 

    public IList<User> Users 
    { 
     get { return _users; } 
     set { _users = value; } 
    } 
+0

Können Sie Ihre Zuordnungsdatei und Entität einschließen? – Nigel

+0

Ja, ich habe die Entität hinzugefügt und bekomme einen Fehler in den Kundenvorgaben, nicht die Benutzer – alice7

Antwort

0

Ihre Zuordnungsdateien sehen gut aus. Ich vermute also, dass das Problem mit der Implementierung der CustomerPreferences-Klasse zu tun hat.

Das Set-Attribut in der Zuordnungsdatei definiert eine Eigenschaft, die (wenn sie Ihrer Entität zugeordnet wird) die Schnittstelle Iesi.Collections.Generic.ISet<T> implementieren muss. Anscheinend können Sie auch die Standardschnittstelle mit NHibernate 2.1 verwenden, aber ich habe das nie versucht.

Wenn Ihre CustomerPreferences-Klasse die Schnittstelle ISet<T> nicht implementiert, erhalten Sie daher eine InvalidCastException.

Verwandte Themen