“创建 SessionFactory 时使用了无效或不完整的配置” NHibernate
"An invalid or incomplete configuration was used while creating a SessionFactory” NHibernate
我在创建 SessionFactory 时遇到此错误。这是代码,如果有人可以检查一下。
class NHibernateHelper {
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory {
get {
if (_sessionFactory == null) {
InitializeSessionFactory();
}
return _sessionFactory;
}
}
private static void InitializeSessionFactory() {
_sessionFactory = Fluently.Configure().
Database(MsSqlConfiguration.MsSql2008.ConnectionString
("Server=tcp:z4m56fgh.database.windows.net,1433;Database=db;User ID=user;Password=xxxxx;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;").
ShowSql()).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<House>()).
ExposeConfiguration(cfg => new SchemaExport(cfg).Create(false, true)).
BuildSessionFactory();
}
public static ISession OpenSession() {
return SessionFactory.OpenSession();
}
}
映射:
public class HouseMap : ClassMap<House> {
public HouseMap() {
Id(x => x.Id);
References(x => x.Owner).Cascade.All();
References(x => x.Rooms).Cascade.All();
References(x => x.Consumptions).Cascade.All();
}
}
public class ConsumptionMap : ClassMap<Consumption> {
public ConsumptionMap() {
Id(x => x.Id);
Map(x => x.Type);
Map(x => x.AvgDay);
Map(x => x.AvgMonth);
Map(x => x.AvgYear);
}
}
public class RoomMap : ClassMap<Room> {
public RoomMap() {
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Number);
Component<TemperatureData>(x => x.TemperatureData,
t => {
t.Map(x => x.TemperatureCurrent, "Current");
t.Map(x => x.TemperatureSet, "Set");
});
Component<RoomFeatures>(x => x.Features,
f => {
f.Map(x => x.Shutters, "ShuttersUp");
f.Map(x => x.Lights, "LightsOn");
});
}
}
这正是 class NHibernateHelper 与另一个模型一起工作,所以它一定是我的映射有问题。此外,如果我从 HouseMap 中排除所有内容,它仍然不起作用,即对参考文献进行评论。
在没有 类 的情况下,很难意识到问题的根源是什么,尽管可以猜测 Consumptions 属性.如果它是一个列表(正如其名称所示),则应使用 HasMany 而不是 References.
进行映射
此外,也许您可以使用 InnerException 附加堆栈跟踪。这可以给我们一个线索。
我在创建 SessionFactory 时遇到此错误。这是代码,如果有人可以检查一下。
class NHibernateHelper {
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory {
get {
if (_sessionFactory == null) {
InitializeSessionFactory();
}
return _sessionFactory;
}
}
private static void InitializeSessionFactory() {
_sessionFactory = Fluently.Configure().
Database(MsSqlConfiguration.MsSql2008.ConnectionString
("Server=tcp:z4m56fgh.database.windows.net,1433;Database=db;User ID=user;Password=xxxxx;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;").
ShowSql()).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<House>()).
ExposeConfiguration(cfg => new SchemaExport(cfg).Create(false, true)).
BuildSessionFactory();
}
public static ISession OpenSession() {
return SessionFactory.OpenSession();
}
}
映射:
public class HouseMap : ClassMap<House> {
public HouseMap() {
Id(x => x.Id);
References(x => x.Owner).Cascade.All();
References(x => x.Rooms).Cascade.All();
References(x => x.Consumptions).Cascade.All();
}
}
public class ConsumptionMap : ClassMap<Consumption> {
public ConsumptionMap() {
Id(x => x.Id);
Map(x => x.Type);
Map(x => x.AvgDay);
Map(x => x.AvgMonth);
Map(x => x.AvgYear);
}
}
public class RoomMap : ClassMap<Room> {
public RoomMap() {
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Number);
Component<TemperatureData>(x => x.TemperatureData,
t => {
t.Map(x => x.TemperatureCurrent, "Current");
t.Map(x => x.TemperatureSet, "Set");
});
Component<RoomFeatures>(x => x.Features,
f => {
f.Map(x => x.Shutters, "ShuttersUp");
f.Map(x => x.Lights, "LightsOn");
});
}
}
这正是 class NHibernateHelper 与另一个模型一起工作,所以它一定是我的映射有问题。此外,如果我从 HouseMap 中排除所有内容,它仍然不起作用,即对参考文献进行评论。
在没有 类 的情况下,很难意识到问题的根源是什么,尽管可以猜测 Consumptions 属性.如果它是一个列表(正如其名称所示),则应使用 HasMany 而不是 References.
进行映射此外,也许您可以使用 InnerException 附加堆栈跟踪。这可以给我们一个线索。