неправильный доступ к загрузке коллекции ошибка - PullRequest
10 голосов
/ 22 марта 2010

Я получаю ошибку

Незаконный доступ к загрузочной коллекции

когда я пытаюсь получить список вариантов, относящихся к определенному товару. Отображение NHibernate как показано ниже

<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>

Я уже пытался изменить лень и обратные свойства, как предлагалось в других темах на этом сайте, но они не сработали.

Я использую NHibernate в сочетании с ASP.NET MVC и пытаюсь просмотреть коллекцию вариантов на мой взгляд. Представление вызывает следующий метод

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

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

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

Приведенный выше код работает без проблем. Но когда я отлаживаюсь непосредственно перед возвратом представления, я вижу, что список вариантов, который содержит продукт, пуст. Когда я открываю более подробную информацию об отладке, она показывает мне ошибку коллекции.

В своем веб-приложении я пытаюсь сделать следующее

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

Ответы [ 5 ]

6 голосов
/ 29 марта 2010

Хорошо, очень глупо, но я наконец решил проблему.

Столбец индекса Ordinal в базе данных не получал правильных значений, поэтому всегда был NULL. Это вызвало ошибку, потому что NHibernate не смог найти столбец индекса для создания списка.

К сожалению, это стоило мне много времени, но я рада, что решила это!

2 голосов
/ 09 августа 2011

inverse = "true" является наиболее часто используемым, потому что это означает, что другая конечная точка - это та, которая имеет ключ от одной ко многим ассоциациям (сторона многих имеет внешний ключ к одной стороне).

2 голосов
/ 23 марта 2010

Есть проблема решена! Я столкнулся с другой проблемой при добавлении продукта с вариантом, поэтому я изменил эту информацию в своем контроллере. Затем я столкнулся с проблемой с отображением, поэтому я изменил отображение, как показано ниже, и все заработало!

    <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>
1 голос
/ 07 февраля 2014

Я получил эту проблему, и это была не проблема картографирования, а проблема с данными. Мы получили слишком много данных в наших коллекциях , но мы все равно получили это исключение вместо чего-то более полезного.

Я ожидал, что моя коллекция будет содержать 10-15 записей, но около 4 миллионов записей.

0 голосов
/ 14 июля 2014

Свойство «многие к одному» не отображается корректно в другом классе карты, поэтому оно не принесет результатов для его привязки.

В основном я удалил строку: map.PropertyRef("Codigo"); И это сработало нормально.

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