C# Fluent NHibernate模型优先,数据库优先于一个项目

C# Fluent NHibernate模型优先,数据库优先于一个项目,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,是否可以配置fluent nhibernate,以基于某些模型类的fluent映射创建db模型,同时在一个项目中手动(sql)创建db表和映射在其上的模型类 我是nhibernate的新手 我开始创建一个模型类,并使用fluent映射来创建db模式。 然后我想添加一些日志框架,该框架假设db是手动创建的 我使用NHibernateMappingGenerator生成了模型类和映射类 在我编译并运行我的项目之后,日志记录表被从数据库中删除 问候,, Sebastian此代码将在实例化时为您创建表:

是否可以配置fluent nhibernate,以基于某些模型类的fluent映射创建db模型,同时在一个项目中手动(sql)创建db表和映射在其上的模型类

我是nhibernate的新手

我开始创建一个模型类,并使用fluent映射来创建db模式。 然后我想添加一些日志框架,该框架假设db是手动创建的

我使用NHibernateMappingGenerator生成了模型类和映射类

在我编译并运行我的项目之后,日志记录表被从数据库中删除

问候,,
Sebastian

此代码将在实例化时为您创建表:

public class NHibernateSessionFactory
{
    private static ISessionFactory _sessionFactory;

    private static ISessionFactory SessionFactory
    {
        get
        {
            if (_sessionFactory == null)
            {
                InitializeNHibernateSessionFactory();
            }

            return _sessionFactory;
        }
    }

    private static void InitializeNHibernateSessionFactory()
    {
        _sessionFactory =
            Fluently.Configure()
                .Database(MySQLConfiguration.Standard
                .ConnectionString(ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString))
                .ShowSql())
                .Mappings(m => m.FluentMappings
                .AddFromAssemblyOf<OneOfMyMappedClassesMap>()))
                .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
                .BuildSessionFactory();
    }
}
公共类NHibernateSessionFactory
{
私人静态ISessionFactory_sessionFactory;
私有静态ISessionFactory会话工厂
{
收到
{
if(_sessionFactory==null)
{
InitializeNHibernateSessionFactory();
}
返回工厂;
}
}
私有静态void InitializeNHibernateSessionFactory()
{
_会话工厂=
fluent.Configure()
.Database(MySQLConfiguration.Standard
.ConnectionString(ConfigurationManager.ConnectionString[“MySQL”].ConnectionString))
.ShowSql())
.Mappings(m=>m.FluentMappings
.AddFromAssemblyOf()))
.ExposeConfiguration(cfg=>newschemaexport(cfg).Create(true,true))
.BuildSessionFactory();
}
}

负责根据映射构建数据库的行是
ExposeConfiguration
one。如果在控制台应用程序中使用此代码,
ShowSql
选项将打印出所有生成的SQL代码。

感谢您的重播,我已经在使用类似的代码,但我的问题略有不同。我有一些用于创建db表的映射。然后我有一些sql代码在同一个数据库中创建其他表集,所以我运行它可以创建这些表*。现在我需要创建一个模型类*和模型映射*,以便能够使用表*中存储的信息。我编译并运行我的代码。表*从数据库中删除,其中包含已存储的所有信息。我的问题是,我想以某种方式通知NHibernate表*不是也不能从代码生成。这是唯一不生成模式的解决方案,每次需要再次生成架构时,是否要运行sql脚本?您可以这样做,但您必须手动维护代码,以应对您对模型所做的每一个与O/RMs的动态特性相冲突的微小更改。无论您部署了什么工作环境,与存储交互时总是有可能出现严重错误。我建议您重新检查为什么必须手动创建其他表,如果有必要,对模型进行一些修改,以便在运行时接受这些更改,并且所有表都将从单个ISession/ISessionFactory实例创建。