#nhibernate #orm #fluent-nhibernate #nhibernate-mapping
#nhibernate #orm #fluent-nhibernate #nhibernate-отображение
Вопрос:
В проекте 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=localhostSQLExpress;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();
Комментарии:
1. вы имеете в виду заменить «????» на MyProject.Data.Mappings. EmployeeMap и будет ли нормально для всех других отображений?
2. @Kris-I Да, если все ваши сопоставления будут находиться в одной сборке (скорее всего, если все они находятся в одном проекте), то указание одного из типов приведет к загрузке этой сборки, чтению всех типов и динамическому добавлению всех произвольных сопоставлений.