2010-03-22 3 views
6

Tôi nhận được lỗitruy cập bất hợp pháp để lỗi thu nạp

truy cập bất hợp pháp vào bộ sưu tập tải

khi tôi đang cố gắng để có được một danh sách các biến thể thuộc về một sản phẩm nào đó. Lập bản đồ NHibernate là như sau

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

Tôi đã cố gắng chancing sự lười biếng và tính nghịch đảo như đề xuất trong các chủ đề khác trên trang web này, nhưng họ đã không làm các trick.

Tôi đang sử dụng NHibernate kết hợp với ASP.NET MVC và tôi đang cố gắng lặp qua bộ sưu tập biến thể trong chế độ xem của mình. Chế độ xem đang gọi phương thức sau

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

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

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

Mã trên không có bất kỳ sự cố nào. Nhưng khi tôi gỡ lỗi ngay trước khi trả lại chế độ xem, tôi thấy danh sách các biến thể mà sản phẩm chứa trống. Khi tôi mở thông tin gỡ lỗi chi tiết hơn, nó hiển thị cho tôi lỗi thu thập.

Theo quan điểm của ứng dụng web của tôi, tôi đang cố gắng để làm

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

Trả lời

5

Được rồi, rất ngu ngốc, nhưng cuối cùng tôi đã giải quyết được sự cố.

Cột chỉ mục Ordinal trong cơ sở dữ liệu không nhận được giá trị chính xác để luôn luôn là NULL. Điều này gây ra lỗi vì NHibernate không thể tìm thấy cột chỉ mục để tạo danh sách.

Chi phí cho tôi rất nhiều thời gian, nhưng rất vui vì tôi đã giải quyết!

2

Got vấn đề được giải quyết! Tôi chạy vào một vấn đề khác thêm một sản phẩm với một biến thể vì vậy tôi đã thay đổi trí thông minh này trong bộ điều khiển của tôi. Sau đó, tôi chạy vào một vấn đề với bản đồ vì vậy tôi thay đổi ánh xạ như dưới đây và tất cả đã làm việc!

<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

nghịch đảo = "true" được sử dụng phổ biến nhất, vì nó có nghĩa là điểm cuối khác là điểm có khóa trong một đến nhiều liên kết (nhiều bên có khóa ngoài ở một bên).

1

Tôi gặp vấn đề này và nó không phải là vấn đề lập bản đồ mà thực sự là vấn đề về dữ liệu. Chúng tôi nhận được quá nhiều dữ liệu trong bộ sưu tập của chúng tôi, nhưng chúng tôi đã nhận ngoại lệ này thay vì một cái gì đó hữu ích hơn.

Tôi dự kiến ​​bộ sưu tập của mình chứa 10-15 bản ghi nhưng có khoảng 4 triệu bản ghi.

+0

nó cũng có thể là trường hợp của sản phẩm chéo (xem https://www.tutorialspoint.com/sql/sql-cartesian-joins.htm) mà bạn có thể hoặc có thể không muốn. – increddibelly

0

Thuộc tính nhiều đến một không được ánh xạ chính xác trong lớp bản đồ khác, vì vậy nó sẽ không mang lại kết quả để liên kết nó.

Về cơ bản tôi đã xóa dòng: map.PropertyRef("Codigo"); Và nó đã hoạt động bình thường.

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