如何使用 FluentNHibernate 创建 ISessionFactory

Posted

技术标签:

【中文标题】如何使用 FluentNHibernate 创建 ISessionFactory【英文标题】:How create ISessionFactory with FluentNHibernate 【发布时间】:2011-11-11 16:01:48 【问题描述】:

在 MyProject.Data 项目中,我有一个名为 mappings 的文件夹,其中包含所有映射。

namespace MyProject.Data.Mappings 
    public class EmployeeMap : ClassMap<Employee>
    
        public EmployeeMap()
        
            Id(x => x.Id);
            Map(x => x.FirstName).Not.Nullable().Length(100);
            Map(x => x.LastName).Not.Nullable().Length(100);
        
     

在 MVC 项目中,在 web.config 中:

  <connectionStrings>
    <add name="db" connectionString="Data Source=localhost\SQLExpress;Initial Catalog=MyDB;Integrated Security=True"/>
  </connectionStrings>

在 global.asax.cs 中,我想创建 ISessionFactory :

var nhConfig = Fluently.Configure().Database(MsSqlConfiguration.MsSql2008
   .ConnectionString(c => c.FromConnectionStringWithKey("db")))
   .Mappings(m => m.FluentMappings.AddFromAssemblyOf<?????>())
   .BuildConfiguration();
ISessionFactory SessionFactory = nhConfig.BuildSessionFactory();

我需要一个: .Mappings(m =&gt; m.FluentMappings.AddFromAssemblyOf&lt;?????&gt;()) 每个映射文件?

谢谢,

【问题讨论】:

【参考方案1】:

不,这样做的目的是告诉 FNH 要查找哪个程序集来查找所有映射。只需指定任何一个即可。

因此,如果您的所有映射都位于同一个程序集中,那么下面的代码将为您工作。

var nhConfig = Fluently.Configure().Database(MsSqlConfiguration.MsSql2008
.ConnectionString(c => c.FromConnectionStringWithKey("db")))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<EmployeeMap>())
.BuildConfiguration();

【讨论】:

你的意思是替换“????”通过 MyProject.Data.Mappings.EmployeeMap 并且所有其他映射都可以吗? @Kris-I 是的,如果您的所有映射都在同一个程序集中(很可能它们都在同一个项目中),那么指定其中一种类型将导致加载该程序集,读取的所有类型,以及动态添加的所有流畅映射。

以上是关于如何使用 FluentNHibernate 创建 ISessionFactory的主要内容,如果未能解决你的问题,请参考以下文章

Fluent NHibernate:如何创建一对多的双向映射?

FluentNHibernate - 如何在没有任何身份字段的情况下进行映射

使用 FluentNhibernate 和 Autofac 的映射接口

如何使用 FluentNHibernate N:N 映射与附加属性的关系

架构之路之ORM--FluentNHibernate之AutoMapping详解

Fluent NHibernate:如何使用约定在组件中指定列名以供参考?