Конфигурация, какую я должен использовать? Из свободного учебника или из кулинарной книги 3.0? - PullRequest
0 голосов
/ 14 января 2011

Я читаю nhibernate cookbook 3.0 и беглый учебник, и я не совсем понимаю, какой из них мне следует использовать (сама по себе поваренная книга имеет много разных способов)

Свободное обучение Nhibernate

private static ISessionFactory CreateSessionFactory()
{
  return Fluently.Configure()
    .Database(
      SQLiteConfiguration.Standard
        .UsingFile("firstProject.db")
    )
    .Mappings(m =>
      m.FluentMappings.AddFromAssemblyOf<Program>())
    .ExposeConfiguration(BuildSchema)
    .BuildSessionFactory();
}

private static void BuildSchema(Configuration config)
{
  // delete the existing db on each run
  if (File.Exists(DbFile))
    File.Delete(DbFile);

  // this NHibernate tool takes a configuration (with mapping info in)
  // and exports a database schema from it
  new SchemaExport(config)
    .Create(false, true);
}

поваренная книга 3.0 pg (76) веб-запрос

1.  In the hibernate-configuration section of web.config, add the current_
session_context_class property with a value of web.

2.  If it doesn't exist already, add a new Global application class (Global.asax).

3.  In Global.asax, add these using statements.

using NHibernate;
using NHibernate.Cfg;
using NHibernate.Context;

4.  Create a static property named SessionFactory.

public static ISessionFactory SessionFactory { get; 
private set; }

5.  In the Application_Start method, add the following code.

protected void Application_Start(object sender, EventArgs e)
{
  log4net.Config.XmlConfigurator.Configure();
  var nhConfig = new Configuration().Configure();
  SessionFactory = nhConfig.BuildSessionFactory();
}
6.  In the Application_BeginRequest method, add the following code.
protected void Application_BeginRequest(object sender, EventArgs e)
{
  var session = SessionFactory.OpenSession();
  CurrentSessionContext.Bind(session);
}

7.  In the Application_EndRequest method, add the following code:
protected void Application_EndRequest(object sender, EventArgs e)
{
  var session = CurrentSessionContext.Unbind(SessionFactory);
  session.Dispose();
}

Тогда они просто используют это для запуска.

Guid productId = new Guid(Request["id"]);
Eg.Core.Product product;
var session = Global.SessionFactory.GetCurrentSession();
using (var tran = session.BeginTransaction())
{
  product = session.Get<Eg.Core.Product>(productId);
  tran.Commit();
}
Page.Title = product.Name;
Label1.Text = product.Name;
Label2.Text = product.Description;

С беглым уроком я также немного запутался, когда обычно помещал этот код в приложение asp.net mvc. Я пытаюсь использовать шаблон хранилища с ninject (DI инъекция).

Так что с обоими способами я не уверен, как заставить это работать с ninject и шаблоном хранилища.

В любом случае лучше для шаблона хранилища и Di?

1 Ответ

0 голосов
/ 14 января 2011

Вы пытались загрузить все решение для запуска проекта? Это всего лишь примеры кода, и вам нужна вся настройка: проект VS с классами сущностей, сопоставлениями, репозиториями и т. Д.

Я бы пошел http://www.sharparchitecture.net/ и https://github.com/sharparchitecture, чтобы загрузить их пример проекта Northwind, который имеет точную настройку, которая вам нужна. Вам нужно будет найти базу данных Northwind и установить ее на свой локальный компьютер, а затем изменить NHibernate.config так, чтобы он указывал на вашу базу данных.

...