2010-03-22 10 views
6

estoy recibiendo el erroracceso ilegal a un error de recogida de carga

acceso ilegal a la recogida de carga

cuando estoy tratando de obtener una lista de variantes que pertenecen a un determinado producto. El mapeo de NHibernate es la siguiente

<list name="Variants" lazy="false" cascade="save-update" inverse="false" table="PluginProduct_ProductVariant"> 
    <key column="ProductId" /> 
    <index column="Ordinal" /> 
    <one-to-many class="Plugin.Product.Business.Entities.Variant, Plugin.Product" /> 
</list> 

Ya he intentado chancing la pereza y propiedades inversas como se sugiere en otros temas en este sitio, pero no hice el truco.

Estoy usando NHibernate en combinación con ASP.NET MVC y estoy intentando recorrer una colección de variante en mi vista. La vista está llamando al siguiente método

 public ActionResult ShowProduct() 
     { 
     var id = new Guid(PluginData.PageParameters["Id"]); 

     var variant = _variantService.GetVariantById(id); 
     var product = variant.Product; 

     return PluginView("ShowProduct.ascx", product); 
     } 

El código anterior se ejecuta sin ningún problema. Pero cuando depuro justo antes de devolver la vista, veo que la lista de variantes que contiene el producto está vacía. Cuando abro información de depuración más detallada, me muestra el error de recolección.

En opinión de mi aplicación web que estoy tratando de hacer lo siguiente

<% 
foreach (var variant in Model.Variants) 
{%> 
    kleur: <%= variant.Color %> 
    van: <%= variant.FromPrice %> voor: <%= variant.Price %> 
<%} %> 

Respuesta

5

Muy bien, muy estúpido, pero finalmente he resuelto el problema.

La columna de índice Ordinal en la base de datos no obtenía los valores correctos, de modo que siempre fue NULL. Esto provocó el error porque NHibernate no pudo encontrar una columna de índice para crear la lista.

Desafortunadamente, me costó mucho tiempo, ¡pero me alegro de haberlo resuelto!

2

consiguió el problema resuelto! Me encontré con otro problema al agregar un producto con una variante, así que cambié esta inteligencia en mi controlador. Entonces me encontré con un problema con el mapeo, así que cambio el mapeo de la siguiente manera y ¡todo funcionó!

<list name="Variants" lazy="false" cascade="all" inverse="false"> 
    <key column="ProductId" /> 
    <index column="Ordinal" /> 
    <one-to-many class="Plugin.Product.Business.Entities.Variant, Plugin.Product" /> 
</list> 
2

inverse = "true" es el más comúnmente usado, porque significa que el otro extremo es el que tiene la clave en una para muchas asociaciones (el lado de muchas tiene una clave foránea por un lado).

1

Tengo este problema y no era un problema de mapeo, sino un problema de datos. Recibimos demasiados datos en nuestras colecciones, pero obtuvimos esta excepción de todos modos en lugar de algo más útil.

Esperaba que mi colección contuviera 10-15 registros pero tenía unos 4 millones de registros.

+0

también podría ser un caso de producto cruzado (ver https://www.tutorialspoint.com/sql/sql-cartesian-joins.htm) que puede o no haber querido. – increddibelly

0

La propiedad de muchos a uno no se correlaciona correctamente en la otra clase de mapa, por lo que no traerá resultados para relacionarla.

Básicamente borré la línea: map.PropertyRef("Codigo"); Y ha funcionado normalmente.

ManyToOne(x => x.Menu, map => 
      { 
        map.Column("COD_MENU"); 
        //map.PropertyRef("Codigo"); 
        map.NotNullable(true); 
        map.Cascade(Cascade.None); 
      }); 
Cuestiones relacionadas