Tôi gặp sự cố khi tải bộ sưu tập. Thiết lập tôi có liên kết một-nhiều, đơn giản, được ánh xạ bằng FluentNHibernate. Pháp nhân được tải ngoại lệ thô lỗ bị ném nhưng truy cập vào bộ sưu tập có liên quan hiển thị "truy cập bất hợp pháp để tải bộ sưu tập". Tôi sẽ dán một phần có liên quan của mã ở đây.Tải bộ sưu tập NHibernate, "truy cập bất hợp pháp để tải bộ sưu tập"
[Serializable]
[DataContract(IsReference = true)]
public partial class Department : Entity
{
...
[DataMember]
public virtual IList<PressJobRun> PressJobRun
{
get { return pressJobRunField; }
protected set { pressJobRunField = value; }
}
...
}
ánh xạ như sau
public DepartmentMap()
{
Id(x => x.Id);
Map(x => x.Name)
.Not.Nullable()
.Length(100);
HasMany(x => x.PressJobRun)
.AsBag()
.Inverse()
.Cascade.AllDeleteOrphan()
.LazyLoad()
.BatchSize(50);
...
}
Tôi cũng đã cố gắng để vô hiệu hóa tải lười biếng, bằng cách loại trừ các dòng và bằng cách gọi .Not.LazyLoad()
, tuy nhiên kết thúc là như nhau.
using (var tx = m_Repository.Session.BeginTransaction())
{
var depts = m_Repository.Session.CreateCriteria<Department>().List<Department>();
var dept = depts[0];
...
}
Tôi nhận thấy việc hiển thị phiên không phải là điều cần làm, nhưng đây là nỗ lực để đảm bảo phiên đó đang mở.
Khi tôi đi sâu ngoại trừ tôi thấy sau stack trace:
at NHibernate.Collection.AbstractPersistentCollection.Initialize(Boolean writing)
at NHibernate.Collection.AbstractPersistentCollection.Read()
at NHibernate.Collection.AbstractPersistentCollection.ReadSize()
at NHibernate.Collection.PersistentBag.get_Count()
at NHibernate.DebugHelpers.CollectionProxy`1.get_Items()
Các Gremlin thú vị đến đây. Tôi đã đặt điểm ngắt trên dòng thiết lập của thuộc tính PressJobRun
.
- nếu tôi bước qua nó và nhanh chóng đồng hồ
pressJobRunField
, tôi thấy "truy cập bất hợp pháp để tải ngoại lệ". - nếu tôi xem nhanh lần đầu tiên
value
biến, tôi thấy bộ sưu tập đã tải. Bước qua dòng setter hoạt động như mong đợi.
gì tôi sử dụng
- Visual Studio 2012, nhắm mục tiêu NET 4
- NHibernate 3.3.1.400
- SQL CE 4
- Castle
- Castle AutoTx facitlity
- Tôi quản lý phiên p er WCF yêu cầu bản thân mình
Những gì tôi đã cố gắng
- vô hiệu hóa lười biếng tải
- chắc phiên mở cửa, và rằng đó là cùng một phiên trong thực hiện các mã vi phạm
- toggled
Inverted
bản đồ bộ sưu tập (nghĩ rằng tôi tin rằng nó nên được đảo ngược) - giải pháp làm sạch và xây dựng lại
- đảm bảo trong Trình quản lý cấu hình rằng tất cả các dự án trong giải pháp đang được xây dựng
- đặt trình gỡ lỗi để phá vỡ tất cả các ngoại lệ được ném.Debugger không phá vỡ với ngoại lệ mà tôi nhìn thấy trong bộ sưu tập thiết