如何使用 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 => m.FluentMappings.AddFromAssemblyOf<?????>())
每个映射文件?
谢谢,
【问题讨论】:
【参考方案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 映射与附加属性的关系