【问题标题】:NHibernate MySql : Create Database AutomaticallyNHibernate MySql:自动创建数据库
【发布时间】:2014-08-08 17:48:57
【问题描述】:

NHibernate 使用 SQLite 自动创建数据库

new SchemaUpdate(configuration).Execute(false, true);

当我尝试使用 MySQL 时我发现首先我必须手动创建架构,然后 NHibernate 会自动为我创建表。

举个更具体的例子假设我有一个连接字符串

<property name="connection.connection_string">Database=mydatabase;
 Data Source=localhost;User Id=x;Password=y</property> 

如果我没有像这样手动或以编程方式在连接字符串中创建与数据库同名的新模式:

  "CREATE SCHEMA IF NOT EXISTS " + "mydatabase";

NHibernate 给我错误:未知数据库“mydatabase”。

如果之前存在名为“mydatabase”的模式,NHibernate 创建 表格自动

所以这是我的简短问题:

NHibernate 创建数据库的 MYSQL 数据库有没有办法 自动在MySQL中手动创建模式而不创建模式?如果有怎么办?

【问题讨论】:

  • 你有没有看到这个问题stackoverflow.com/questions/914371/…
  • 是的。我知道了。但是 NHibernate 为 SQLite 创建数据库。你确定它不是为 MySQL 创建的吗?
  • 实体框架也会自动为 MYSQL 创建数据库。为什么不使用 NHibernate?
  • 你看答案了吗,sqlite不需要特殊配置,而mssql和mysql需要的不仅仅是CREATE SCHEMA foo;
  • 因固执而被否决。

标签: c# mysql nhibernate orm


【解决方案1】:

NHibernate 不会为任何数据库系统创建数据库。然而,SQLite 自身 将创建您要求的任何数据库,如果它尚不存在,至少在通过 System.Data.SQLite.dll 使用时是这样。这与大多数其他数据库引擎不同。

一个数据库引擎不需要某些操作这一事实本身并不意味着 NHibernate 必须承诺为您为任何其他数据库引擎执行此操作。

关于问题:

是否可以在 MySQL 中自动创建数据库?

答案是:“是的,只需编写代码来执行所需的 SQL 语句。”

关于问题:

NHibernate 会自动创建 MySQL 数据库吗?

答案是:“不”。

【讨论】:

  • 感谢您清晰而简短的回答。但是微软的 EF 为 MYSQL 创建了数据库 [有趣的是它不适用于 SQLite]。对我来说,如果我编写所需的 SQL 语句,为什么还要使用 ORM 框架。NHibernate 应该明确支持此功能。
  • 创建数据库有额外的参数很重要,在MySql中是CHARACTER SETCOLLATE(其他数据库有类似的东西)不是连接字符串的一部分,方言或驱动程序。 NHibernate 将如何选择合适的?同样令人惊讶的是,连接字符串中的拼写错误会默默地创建一个新数据库,而不是告诉你
  • @HippiasMinor 这已经过时了,但我应该澄清一下,因为经常使用矛盾的术语。 NHibernate 不会创建数据库,但是,如果您将其指向现有(但为空)的数据库,它可以在该数据库中创建表等的模式定义。谢天谢地,它不会自动发生。您必须对 NHibernate 进行必要的调用才能触发它。
猜你喜欢
  • 2019-05-06
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
相关资源
最近更新 更多