Skip to content

ASP.NET Core

Martin Havlišta edited this page Sep 4, 2018 · 33 revisions

WORK IN PROGRESS

Follow these steps to use CoreDdd in ASP.NET Core MVC application (tested with Visual Studio 2017 and .NET Core 2.1):

  1. Create a new ASP.NET Core MVC project.
  2. Install CoreDdd.AspNetCore nuget package.
  3. Install CoreDdd.Nhibernate nuget package.
  4. Add a new empty NHibernate configurator class, example:
using System.Reflection;
using CoreDdd.Nhibernate.Configurations;

namespace CoreDddSampleAspNetCoreWebApp
{
    public class CoreDddSampleNhibernateConfigurator : NhibernateConfigurator
    {
        protected override Assembly[] GetAssembliesToMap()
        {
            return new Assembly[0];
        }
    }
}
  1. Add a new NHibernate config file hibernate.cfg.xml . Here is SQLite example:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>

    <property name="connection.connection_string">Data Source=CoreDddSampleAspNetCoreWebApp.db</property>
    <property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
    <property name="connection.release_mode">on_close</property>

    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="show_sql">false</property>
    <property name="proxyfactory.factory_class">NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate</property>
    <property name="transaction.use_connection_on_system_prepare">false</property>

  </session-factory>
</hibernate-configuration>

Set hibernate.cfg.xml Build Action to Content, and Copy to Output Directory to Copy if newer.

  1. Install System.Data.SQLite.Core nuget package. Version 1.0.108 needs to be manually installed via command Install-Package System.Data.SQLite.Core -Version 1.0.108 from Package Manager Console (Tools -> Nuget Package Manager -> Package Manager Console; current latest version 1.0.109.1 is broken). For different databases, please look at Entity database persistence.
  2. Add services.AddSingleton<INhibernateConfigurator, CoreDddSampleNhibernateConfigurator>(); into Startup.ConfigureServices()
  3. Add services.AddScoped<IUnitOfWork, NhibernateUnitOfWork>();
  4. Add app.UseMiddleware<UnitOfWorkMicrosoftDependencyInjectionMiddleware>(IsolationLevel.ReadCommitted); into Startup.Configure()

After this, the web application should be able to handle each request within a database transaction. Please look at other wiki pages how to persist an entity, query data, modify an application state or create more complex DDD implementation.

Clone this wiki locally