【问题标题】:Fluent NHibernate model first and database first in one projectFluent NHibernate 模型优先和数据库优先在一个项目中
【发布时间】:2014-03-25 23:00:06
【问题描述】:

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

我是 nhibernate 的新手。

我开始创建模型类并使用流利的映射来创建数据库模式。 然后我想添加一些日志框架,假设数据库是手动创建的。

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

在我编译并运行我的项目后,日志表已从数据库中删除。

问候, 塞巴斯蒂安

【问题讨论】:

    标签: c# nhibernate fluent-nhibernate


    【解决方案1】:

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

    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();
        }
    }
    

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

    【讨论】:

    • 感谢重播,我已经在使用类似的代码,但我的问题略有不同。我有一些用于创建数据库表的映射。然后我有一些 sql 代码在同一个数据库中创建其他表集,所以我运行它可以创建这些表*。现在我需要创建模型类* 和模型映射* 才能使用存储在表中的信息*。我编译并运行我的代码。表* 将从数据库中删除,其中包含已存储的所有信息。我的问题是我想以某种方式通知 NHibernate,表*不是也不能从代码生成。
    • 这是唯一不生成模式的解决方案,每次我需要再次生成模式时运行 sql 脚本?
    • 您可以这样做,但您必须手动维护代码,以应对您对模型执行的每一个与 O/RM 的动态性质相冲突的小更改。无论您部署什么解决方法,与您的存储交互总是有可能出现严重错误。我建议您重新检查必须手动创建其他表的原因,并在必要时对您的模型进行一些修改,以便在运行时接受这些更改,并且所有表都将从单个 ISession/ISessionFactory 实例创建。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多