Настройте конфигурацию NHibernate с универсальными типами - PullRequest
0 голосов
/ 29 октября 2019

Я не использую бегло 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]]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...