You can create event listeners in NHIbernate which allow you to set the default value of a property on a model when a new record is inserted into the database, which is roughly the equivalent to setting the default value of a column in SQL Server. Say you have a Product model like so:

public class Product 
{
    public virtual string Name { get; set; }
    public virtual DateTime Created { get; set; }
}

With NHibernate, you've probably noticed that one of the downsides of having to mark every property as virtual and using auto getters and setters is that there is not a way to set the default value of the given property.

To solve this problem, we can implement one of NHibernate's event listener interfaces so that a given field in an inserted record is automatically pre-populated with a given value; in our case this will be the value of DateTime.Now. The particular event listener interface that is of interest to us is the IPreInsertEventListener interface. We can implement this interface to create the auto date generation functionality as desired:

using NHibernate.Event;
using NHibernate.Persister.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;

namespace YourApplication.NHibernate.EventListeners
{
    public class AutoGenerateDateOnRecordInsert : IPreInsertEventListener
    {
        public bool OnPreInsert(PreInsertEvent @event)
        {            
            var time = DateTime.Now;
            // Change the 'propertyName' parameter value if your property is called something different other than 'Created'
            Set(@event.Persister, @event.State, "Created", time);

            return false;
        }

        private void Set(IEntityPersister persister, object[] state, string propertyName, object value)
        {
            var index = Array.IndexOf(persister.PropertyNames, propertyName);
            if (index == -1)
                return;
            state[index] = value;
        }
    }
}

Once we have implemented this class, you can register the new event listener in the Fluent NHibernate configuration file like so:

public FluentConfiguration BuildConfiguration()
{
    return Fluently.Configure()
        .Database(() =>
        {
            return MsSqlConfiguration.MsSql2012.ConnectionString(x => x.FromConnectionStringWithKey("main"));
            
        })
        .ExposeConfiguration(el =>
        {
            el.EventListeners.PreInsertEventListeners = new IPreInsertEventListener[] { new AutoGenerateDateOnRecordInsert() };
         })
        .ExposeConfiguration(BuildSchema); // Call to your schema build method
}

And that is it. Every time a record is created, the column's default value will be set to the value of DateTime.Now

Wunderbar!