【问题标题】:Invalidcastexception error while using set or bag cascading使用 set 或 bag 级联时出现 Invalidcastexception 错误
【发布时间】:2009-07-06 20:15:57
【问题描述】:

我有一个包含子对象的父类。 保存父对象时,我使用 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; 私有字符串_name; 私有 IList _users = new List(); 私人客户偏好 _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; }
    }

【问题讨论】:

  • 能否包含您的映射文件和实体?
  • 是的,我已经添加了实体,但我在客户偏好而不是用户中遇到错误

标签: sql nhibernate


【解决方案1】:

您的映射文件看起来不错。所以我猜测问题与您对 CustomerPreferences 类的实现有关。

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

因此,如果您的 CustomerPreferences 类没有实现 ISet&lt;T&gt; 接口,那么您将收到 InvalidCastException。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 2015-02-08
    • 2011-08-31
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多