2013-08-23 60 views
0

我有两个类。两个类都具有相似的结构,因为它们都具有多对多的关系。但奇怪的是,第二堂课造成了LazyInitializationException。我不知道为什么?两者都从中间表中提取数据,但第二类怎么会只产生错误?在一个类中引发NHibernate LazyInitializationException而不是另一个类

public class TaskMap : VersionedClassMap<Task> 
{ 
    public TaskMap() 
    { 
     Id(x => x.TaskId); 
     Map(x => x.Subject).Not.Nullable(); 
     Map(x => x.StartDate).Nullable(); 
     Map(x => x.DueDate).Nullable(); 
     Map(x => x.DateCompleted).Nullable(); 

     References(x => x.Status, "StatusId"); 
     References(x => x.Priority, "PriorityId"); 
     References(x => x.CreatedBy, "CreatedUserId"); 

     HasManyToMany(x => x.Users) 
      .Access.ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore) 
      .Table("TaskUser") 
      .ParentKeyColumn("TaskId") 
      .ChildKeyColumn("UserId"); 

     HasManyToMany(x => x.Categories) 
      .Access.ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore) 
      .Table("TaskCategory") 
      .ParentKeyColumn("TaskId") 
      .ChildKeyColumn("CategoryId"); 
    } 
} 

public class LocationMap: VersionedClassMap<Location> 
{ 
    public LocationMap() 
    { 
     Id(x => x.LocationId); 
     Map(x => x.Name).Not.Nullable(); 
     Map(x => x.Address).Nullable(); 
     Map(x => x.City).Nullable(); 
     Map(x => x.State).Nullable(); 
     Map(x => x.Country).Nullable(); 
     Map(x => x.Pincode).Nullable(); 

     HasManyToMany(x => x.Departments) 
      .Access.ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore) 
      .Table("LocationDepartment") 
      .ParentKeyColumn("LocationId") 
      .ChildKeyColumn("DepartmentId"); //.Fetch.Join(); Adding this removes the error 
    } 
} 

编辑:

这里是link该项目。

回答

2

您没有提供任何代码如何将它与ISession一起使用,但是当您试图读取与关闭会话关联的实体上的未初始化的懒惰属性/集合时,会发生此类异常。使会话保持活动状态,直到您使用实体。 UPDATE
我无法弄清楚会议闭幕时的合理时间。你可以做的最好的是在你的查询中使用急切的加载。以下是LocationController的一个示例:

public IEnumerable<Location> Get() 
{ 
    return _session 
      .QueryOver<Data.Model.Location>() 
      .Fetch(x => x.Departments).Eager 
      .List() 
      .Select(_locationMapper.CreateLocation); 
} 
+0

我将在星期一到达办公室时共享我的整个解决方案。请帮我解决这个问题。 –

+0

我已经添加了源代码。你能告诉我发生了什么吗? –

+0

有很多代码。异常抛出在哪里?如何重现该问题? –

相关问题