Я не использую бегло NHibernate.
Я хочу использовать универсальные типы DB Postgree.
Когда я добавляю какой-либо продукт, у меня появляется ошибка:
public class Product<T> : IProduct<T>
{
public virtual T Id { get; set; }
public virtual string Name { get; set; }
}
public interface IProduct<T>
{
T Id { get; set; }
string Name { get; set; }
}
private static Configuration GetNHConfig(string conn)
{
var config = new NHibernate.Cfg.Configuration()
.SetNamingStrategy(ImprovedNamingStrategy.Instance)
.DataBaseIntegration(db =>
{
db.ConnectionString = conn;
db.Dialect<PostgreSQL83Dialect>();
db.LogFormattedSql = true;
db.LogSqlInConsole = true;
});
var mapper = new ModelMapper();
mapper.AddMappings(Assembly.GetAssembly(typeof(IProduct<>)).GetExportedTypes());
var mapping = mapper.CompileMappingForAllExplicitlyAddedEntities();
config.AddMapping(mapping);
config.SessionFactory().GenerateStatistics();
return config;
}
public void Save(IProduct<T> item)
{
using (var tx = _session.BeginTransaction())
{
_session.Save(item);
tx.Commit();
}
}
var nConf = GetNHConfig(connString);
using (var factory = nConf.BuildSessionFactory())
{
using (var session = factory.OpenSession())
{
var baseWorker = new SqlWorker<int>(session);
var logger = new Logger();
var manager = new ProductManager<int>(logger, baseWorker);
var id = 1;
manager.AddProduct(new Product<int>() { Id = id++, Name = "First" });
...
}
UDP: Mapper
public class ProductMapping<T> : ClassMapping<Product<T>>
{
public ProductMapping()
{
Table("products");
Property(x => x.id, map => { map.NotNullable(true); });
Property(x => x.Name, map => { map.NotNullable(true); });
}
}
Метод Вызов AddProduct Сохранить (элемент IProduct)
Не сохраняется для: ThirdExercise.Product`1 [[System.Int32, System.Private.CoreLib, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 7cec85d7bea7798e]]