【问题标题】:Fluent Nhibernate external configurationFluent Nhibernate 外部配置
【发布时间】:2010-06-03 16:59:58
【问题描述】:

所有流畅的 nhibernate 示例都进行此类(或类似)调用:

c.AddMappingsFromAssembly(typeof(Product).Assembly);

我不想你使用“typeof(Product).Assembly”,因为我不想在这里引用我的域项目(“Procuct”类)。在普通 NHibernate 中,我只需创建 hbm.xml 文件并在 web.config 中进行以下条目:

  <mapping assembly="TestingFluentHN"/>

但此条目不适用于 FluentNHibernate。在我的会话构建方法中是否有一种优雅的方式来提供程序集?最好来自配置文件。

资源: 不需要的代码/依赖的上下文:

static NHSessionManager()
{
    Configuration c = new Configuration();
    //change following to sth that does not need refernce to domain
    c.AddMappingsFromAssembly(typeof(Product).Assembly);
    c.Configure();      
    sessionFactory = c.BuildSessionFactory();
}

我的第一个想法是从 appSettings 读取程序集名称并加载它们:

var assembliesToMap = new List<string>();
foreach (var assemblyName in assembliesToMap)
{
    var assembly = Assembly.LoadFile(assemblyName);
    c.AddMappingsFromAssembly(assembly);
}

但这是我最后的选择。我正在寻找流畅的 nhibernate 构建。

【问题讨论】:

    标签: c# nhibernate configuration fluent-nhibernate fluent


    【解决方案1】:

    我不知道 fluent nhibernate 中内置的任何内容可以满足您的需求。您可能需要使用您在问题末尾列出的方法。

    我不确定我是否没有正确了解您的应用程序的布局方式,但整个想法似乎有点误导。无论如何,您都需要依赖域对象来查询会话,而且这似乎与会话工厂的创建在同一个程序集中。如果没有,您可以考虑使用依赖注入来提供会话管理器(来自了解域对象的项目)。

    如果我遗漏了什么,请告诉我。

    【讨论】:

    • 好吧,我做了更多的研究,我查看了 Sharp Architecure 的代码,看看他们是如何做到的,我还没有找到 web.config/app.config 的方式。正如您所写,我最终注入了一个接口,该接口具有将所有带有映射的程序集返回到我的核心项目的方法。关于你对整个想法的怀疑:):有(在其他项目中)核心和“我们的框架”(一个可重用的部分,例如通用数据访问 - 我想在其他解决方案中使用的项目)。 “我们的框架”处理需要映射的 NH,但这些是核心。 “out framework”当然不能依赖Core。
    • 附注Sharp Architecture 的人以类似的方式做到这一点。依赖于清晰架构的项目通过映射传递程序集名称数组。 -> NH 在尖锐的建筑内,实体在使用尖锐拱门的项目中。感谢您的回复。
    • 我想这就是你要找的东西——我猜有时你只需要你要找的词。很高兴你成功了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多