gpt4 book ai didi

c# - Fluently.Configure NHibernate 数据库从配置文件?

转载 作者:行者123 更新时间:2023-12-04 20:15:22 24 4
gpt4 key购买 nike

这个问题类似于Configuring Fluent NHibernate from NHibernate config section但我仍在努力解决这个问题,答案还不够。

我想制作一个与数据库无关的库存管理应用程序(更像是一个实验而不是其他任何东西)。我想使用 Fluent 自动映射器,因为如果我能让它工作,这似乎是一个非常酷的主意……让事情变得美好和通用,并且有点强制您使用模式。

因此,我使用 SessionFactory 创建者创建了一个辅助类,如下所示:

    private static ISessionFactory _SessionFactory;

public static ISessionFactory SessionFactory {
get {
if (_SessionFactory == null) {

var config = new Configuration().Configure();
_SessionFactory = Fluently.Configure(config)
.Mappings (m => m.AutoMappings.Add (AutoMap.AssemblyOf<Machine> ()))
.BuildSessionFactory ();
}
return _SessionFactory;
}
}

public static ISession GetSession()
{
return SessionFactory.OpenSession();
}

我制作了一个 app.config 像这样:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<connectionStrings>
<add name="NHDataModel" connectionString="Data Source=10.10.10.10;Integrated Security=SSPI;Database=Inventory;" />
</connectionStrings>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.connection_string_name">NHDataModel</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
</configuration>

当我尝试生成要播放的 session 时收到的错误消息如下:
An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.

* Database was not configured through Database method.

没有内在的异常(exception)。

我认为这行得通,但我当然会错。配置对象的检查表明它已经收集了应用配置中的属性信息,但似乎无法将其应用于流畅的数据库方法。我在互联网上看到过与此非常相似的示例,尽管没有一个完全匹配,因此存在很多愚蠢错误的空间。

我确信这是一件简单的事情,但我已经为此挠头数小时了。任何帮助将不胜感激。 Nhibernate 和 FluentNhibernate 是我以前从未使用过的技术,所以这是一个陡峭的学习曲线。

最佳答案

你的方法看起来不错; Fluent NHibernate 确实应该允许您从配置开始并添加到其中。这是来自 Fluent NHibernate 站点的代码,它在语义上与您的相同,除了您是自动映射而不是流畅映射:

var cfg = new NHibernate.Cfg.Configuration();
cfg.Configure(); // read config default style
Fluently.Configure(cfg)
.Mappings(
m => m.FluentMappings.AddFromAssemblyOf<Entity>())
.BuildSessionFactory();

我看到的唯一主要区别是该站点的代码从未将 config 对象变量显式分配给 Configure() 方法的结果;这意味着除了返回自身(或仅返回自身)的深层克隆之外,Configure() 还会修改调用它的实例。

需要检查的一些事项:您确定您使用的 Fluent 版本引用了使用配置版本 2.2 的 NHibernate 版本吗? FNH 1.2 针对 NH 3.1,而 FNH 1.1 针对 NH 2.1.2GA。我不知道它们使用的是哪个配置版本,但是如果它们与 NH 版本匹配,那么 Configure() 方法可能找不到与它正在使用的 ConfigSectionHandler 匹配的配置部分。

关于c# - Fluently.Configure NHibernate 数据库从配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7841618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com