使用set或bag cascading时出现Invalidcastexception错误

时间:2009-07-06 20:15:58

标签: sql nhibernate

我有一个包含子对象的父类。 保存父项时,我使用set来保存子对象。 我不确定set是否仅用于保存子对象。 我在下面得到这个错误

System.InvalidCastException:无法将类型为'x'的对象强制转换为'Iesi.Collections.ISet'

有人知道解决方案。

<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>

实体类: 公共级客户     {         私人Guid _id;         private string _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; }
    }

1 个答案:

答案 0 :(得分:0)

您的映射文件看起来很好。所以我猜这个问题与你的CustomerPreferences类的实现有关。

映射文件中的set属性定义了一个属性(当映射到您的实体时)必须实现Iesi.Collections.Generic.ISet<T>接口。显然你也可以使用NHibernate 2.1的标准ICollection<T>接口,但我从来没有尝试过这个。

因此,如果您的CustomerPreferences类未实现ISet<T>接口,那么您将获得InvalidCastException。