Hello Ricardo,
thanks for dropping by the question .... Alas, it still does not work :
(
I tried to find if I am returning List instead of IList, but I checked
everything is fine, still nhibernate throws the same exception.
I again re-iterate here, that if I move the component outside and
flatten the class/mapping, the same code works fine.
But it is not a feasible solution in our context. Could you please
read the code below, and point me where I am doing wrong.
I am pasting a sample code to replicate the problem:
----- STOCK CLASS ----
public class Stock
{
public int? stockId { get; set; }
public string stockCode { get; set; }
public string stockName { get; set; }
public IList<Category> PublicCategory { get; set; }
public Private Private { get; set; }
}
public class Private
{
public Category[] PrivateCategory { get; set; }
// This is required as I want to map the array as a <bag>
because our data model does not have index column
private IList<Category> _PrivateCategoryList = null;
// This property is only for the mapping and the "private
IList<Category> _PrivateCategoryList" gets filled when nhibernate
calls the property
public IList<Category> PrivateCategories
{
get
{
if (_PrivateCategoryList == null)
{
_PrivateCategoryList = new List<Category>();
foreach (Category c in PrivateCategory)
{
_PrivateCategoryList.Add(c);
}
}
return _PrivateCategoryList;
}
set
{
if (value != null)
{
PrivateCategory = new Category[value.Count];
for (int i = 0; i < value.Count; i++)
{
PrivateCategory[i] = value[i];
}
}
}
}
}
----- STOCK MAPPING ------
<class name="Stock" table="Stock" lazy="false">
<id name="stockId" column="STOCK_ID">
<generator class="native" />
</id>
<property name="stockCode" column="STOCK_CODE"/>
<property name="stockName" column="STOCK_NAME"/>
<bag name="PublicCategory" table="Stock_Category" cascade="all-
delete-orphan" lazy="false" where="TYPE=0">
<key column="STOCK_ID"/>
<many-to-many class="Category" column="CATEGORY_ID"/>
<sql-insert>
INSERT INTO Stock_Category(Type, STOCK_ID,
CATEGORY_ID)
values(0,?,?)
</sql-insert>
</bag>
<component name ="Private" class="Private">
<bag name="PrivateCategories" table="Stock_Category"
cascade="all-
delete-orphan" lazy="false" where="TYPE=1">
<key column="STOCK_ID"/>
<many-to-many class="Category" column="CATEGORY_ID"/>
<sql-insert>
INSERT INTO Stock_Category(Type, STOCK_ID,
CATEGORY_ID)
values(1,?,?)
</sql-insert>
</bag>
</component>
</class>
---- CATEGORY CLASS ----------
public class Category
{
public int? categoryId { get; set; }
public string categoryName { get; set; }
}
---- CATEGORY MAPPING ------------
<class name="Category" table="Category" lazy="false">
<id name="categoryId" column="CATEGORY_ID">
<generator class="native" />
</id>
<property name="categoryName" column="CATEGORY_NAME"/>
</class>
-
sando
On May 23, 10:20 pm, Ricardo Peres <[email protected]> wrote:
> That's because in your code you have a List<Something> instead of a
> IList<Something> (notice the I).
>
> On May 23, 12:27 pm, sando <[email protected]> wrote:
>
>
>
>
>
>
>
> > Please read the detail of my problem, which is exactly similar
> > to:http://www.mail-archive.com/[email protected]/msg18775.html
>
> > Unable to cast object of type:
> > 'System.Collections.Generic.List`1[ENTITY]' to type
> > 'NHibernate.Collection.IPersistentCollection'.
>
> > However, my properties return IList<T> and NOT List<T>.
>
> > To summarize: I have a <bag> inside a <component> as nhibernate
> > mapping.
> > I always get a cast exception.
>
> > If I'm bringing <bag> mapping out of <component> tag, then save\update
> > works fine.
>
> > Is this a bug in nhibernate?
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.