我有一个包含子对象的父类。 保存父项时,我使用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; }
}
答案 0 :(得分:0)
您的映射文件看起来很好。所以我猜这个问题与你的CustomerPreferences类的实现有关。
映射文件中的set属性定义了一个属性(当映射到您的实体时)必须实现Iesi.Collections.Generic.ISet<T>
接口。显然你也可以使用NHibernate 2.1的标准ICollection<T>
接口,但我从来没有尝试过这个。
因此,如果您的CustomerPreferences类未实现ISet<T>
接口,那么您将获得InvalidCastException。