0
我有兩個型號,DerbySpawn和DerbyArena一對多NHibernate的
DerbyArena.cs
public class DerbyArena
{
public DerbyArena()
{
DerbySpawns = new List<DerbySpawn>();
}
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual short MaxPlayers { get; set; }
public virtual short MinPlayers { get; set; }
public virtual short Interior { get; set; }
public virtual short Model { get; set; }
public virtual float MinZ { get; set; }
public virtual IList<DerbySpawn> DerbySpawns { get; set; }
}
DerbySpawn.cs
public class DerbySpawn
{
public virtual int SpawnId { get; set; }
public virtual float SpawnX { get; set; }
public virtual float SpawnY { get; set; }
public virtual float SpawnZ { get; set; }
public virtual float SpawnA { get; set; }
public virtual DerbyArena DerbyArena { get; set; }
}
我的映射
DerbyArenaMap
public class DerbyArenaMap : ClassMap<DerbyArena>
{
public DerbyArenaMap()
{
Id(x => x.Id);
Map(x => x.Interior);
Map(x => x.MaxPlayers);
Map(x => x.MinPlayers);
Map(x => x.Model);
Map(x => x.Name);
Map(x => x.MinZ);
HasMany<DerbySpawn>(x => x.DerbySpawns)
.Inverse()
.AsBag();
Table("DerbyArens");
}
}
DerbySpawnMap
public class DerbySpawnMap : ClassMap<DerbySpawn>
{
public DerbySpawnMap()
{
Id(x => x.SpawnId);
Map(x => x.SpawnX);
Map(x => x.SpawnY);
Map(x => x.SpawnZ);
Map(x => x.SpawnA);
References(x => x.DerbyArena);
Table("DerbySpawns");
}
}
在DerbyArens列ID是主鍵,自動遞增
在DerbySpawns列SpawnId是主鍵,自動遞增和列DerbyArena是外鍵與表DerbyArens的關係,列Id
我這段代碼中隨機選擇舞臺:
using (ISession session = DbSession.OpenSession())
{
arena = (from x in session.Query<DerbyArena>() orderby Guid.NewGuid() select x).First();
}
但是當我使用
Console.Write(arena.DerbySpawns[y].SpawnX + " " + arena.DerbySpawns[y].SpawnY + " " + arena.DerbySpawns[y].SpawnZ + " " + arena.DerbySpawns[y].SpawnA);
我得到異常
個NHibernate.LazyInitializationException:初始化[SSS.Models.DerbyArena#1] - 不能延遲初始化角色集合:SSS.Models.DerbyArena.DerbySpawns,沒有會話或會話已關閉
DbSession.cs
public static class DbSession
{
private static ISessionFactory _sessionFactory;
public static ISessionFactory Factory
{
get { return _sessionFactory ?? (_sessionFactory = CreateSessionFactory()); }
}
public static ISession OpenSession()
{
return Factory.OpenSession();
}
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(
MySQLConfiguration.Standard
.ConnectionString("connectionstring(thiswork)")
//Your connectionstring goes here.
)
.Mappings(m =>
m.FluentMappings.AddFromAssemblyOf<DbMappings>())
.ExposeConfiguration(TreatConfiguration)
.BuildSessionFactory();
}
private static void TreatConfiguration(Configuration configuration)
{
var update = new SchemaUpdate(configuration);
update.Execute(false, true);
}
}