Не сохранять: ошибка при сохранении данных с использованием режима гибернации - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь сохранить данные в моей таблице БД, используя свободный режим гибернации, но это дает мне «Не сохранять для:».Я перепробовал много решений, доступных в сети, но ничто не помогло мне выбраться из этой ситуации.Может ли кто-нибудь помочь мне решить, я потратил почти 2 дня, чтобы найти причину этой ошибки, но все еще не найден.

private static ISessionFactory InitializeSessionFactory()
{
    return Fluently.Configure().Database(MsSqlConfiguration.MsSql2012

   .ConnectionString(ConfigurationManager.ConnectionStrings["test"]
   .ConnectionString).ShowSql())
   .Mappings(m =>
    m.FluentMappings.AddFromAssemblyOf<Domain.Mapping.StatusMap>())
   .BuildSessionFactory();
}

public class StatusTypeTest
{
    public double Statusid { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public double? Createbyid { get; set; }

}

public class StatusMap : ClassMapping<StatusTypeTest>
{
    public StatusMap()
    {
        Schema("dbo");
        Table("Status");
        Lazy(false);
        Id(x => x.Statusid, map => map.Generator(Generators.Identity));

        Property(x => x.Title, map => map.Length(50));
        Property(x => x.Description, map => map.Length(250));
        Property(x => x.Createbyid, map => map.Precision(10));
    }
}



 StatusTypeTest obj= new StatusTypeTest(); 
 obj.Title = "test";
 obj.description = "My unit test";
 obj.createdBy = 1; 

 using (var session = Factory.OpenSession()) 
 { 
   using (ITransaction transaction = session.BeginTransaction())
    { 
      session.Save(obj);
      transaction.Commit(); 
    } 
  } 

1 Ответ

0 голосов
/ 01 июля 2019

г.Вы можете зарегистрироваться ниже класса как singleton

    public class SessionSource
    {
        private string _connectionStringProvider;
        public SessionSource(string connectionStringProvider)
        {
            _connectionStringProvider = connectionStringProvider;
        }

        public ISession GetSession()
        {
                var session = GetSessionFactory().OpenSession();
                return session;
        }

        private Configuration AssembleConfiguration(string connectionString)
        {
            return Fluently.Configure()
                    .Mappings(x => x.FluentMappings.AddFromAssemblyOf<MappingCandidate>())
                    .Database(() =>
                    {
                        return FluentNHibernate.Cfg.Db.MsSqlConfiguration
                            .MsSql2012
                            .ConnectionString(connectionString);
                    })
                    .BuildConfiguration();
        }

        private ISessionFactory GetSessionFactory()
        {
            var sessionFactory = AssembleConfiguration(_connectionStringProvider).BuildSessionFactory();
            return sessionFactory;
        }
    }

, а затем, как вы использовали Factory.OpenSession (), вы можете внедрить sessionSource и использовать его

 using (var session = _sessionSource.GetSession())
 {

, с этим вы можете быть уверены, что вызарегистрировать все необходимые отображения.

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