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.

Reply via email to