【问题标题】:Creating DB using ORM使用 ORM 创建数据库
【发布时间】:2011-01-02 18:57:21
【问题描述】:

有没有可以创建数据库的 C# .NET ORM?
它至少应该能够创建 MS + MySQL + PostGre + Oracle 数据库。
我不是指表或模式,我指的只是数据库。
我使用 nHibernate,但它只能创建表和模式,以及查询/插入,但不能创建数据库本身。

【问题讨论】:

  • 呃,一般情况下不会,ORM 采用 other 方式。您在寻找某种可视化数据库设计器吗?
  • 不,我正在寻找一种可以直接在客户那里创建数据库的工具,而无需我去那里,也无需客户对数据库有任何了解......最好是这样我只需在安装项目中询问数据库类型和用户名+ pw,然后自动创建数据库安装文件。我并不是说 Visual Database Designer + RemoteDesktop + 我的很多时间
  • 听起来你根本不想要 ORM;您只需要一个跨平台的数据库创建实用程序,它可能是也可能不是 ORM 包的一部分。这一点很重要,因为数据库创建部分决定如何从数据库中获取对象是非常愚蠢的
  • 由于 ORM 知道映射和模式,它实际上能够处理这个,虽然是的,这不是“ORM”所暗示的。但是有一些 ORM 工具可以做到这一点;此外,其中一些甚至可以升级架构。
  • 关于数据库创建:有些工具会创建架构,但我目前还没有看到能够创建数据库的工具......

标签: c# .net sql vb.net orm


【解决方案1】:

这通常有点超出 ORM 的范围。创建一个通常与应用程序特定的映射(权限、访问控制等)几乎没有关系的数据库具有相当大的复杂性。有时 ORM 工具会生成您从头开始创建数据库所需的 DDL/语句,但这与实际创建数据库本身并不完全相同。

【讨论】:

  • 不幸的是,你似乎是唯一能理解这个问题的人,我越来越绝望,因为似乎真的没有这样的工具,甚至没有价格。
【解决方案2】:

http://www.signumframework.com/

基于模型优先方法的极少数 ORM 之一。


(来源:signumframework.com

另请注意,实体框架的未来版本应该支持模型优先方法。

【讨论】:

  • 好吧,除了编辑我的问题的意义之外,我将在这里宣扬你无用的产品的咒骂和冒犯,并说我非常怀疑我是否需要一个 ORM 包装器,如果我只想想要 MS-SQL 2005 & 2008 支持...
  • 嘿,我不是signum的创造者或推动者。我不介意您对我的回答投反对票,但这不应影响 signum 或其创建者的声誉。如果我是签名人,为什么我会在我的答案中包含实体框架。
  • 嗯,不确定。不过,我不是给你投反对票的人,因为它与我的问题无关。
【解决方案3】:

我使用 nHibernate 的 (NHibernate.Tool.hbm2ddl) SchemaExport 功能从我的类和映射生成 DDL。

看看这些:

Create DB from Classes and Mappings with NHibernate-Domain Driven Design
NH Toolset Guide

相关的 SO 帖子:
NHibernate SchemaExport and Configure() catch-22

更新:
阅读您的评论后,我不太确定这是您需要的。无论如何,仅供参考。

【讨论】:

  • 我怀疑模式导出可以做他想做的事。见wiki.fluentnhibernate.org/Schema_generation
  • 是的,创作在那里工作,但仅适用于 SQlite。当我用MS-SQL替换时,它不起作用。
  • 是的,这不是我需要的。此外,我非常怀疑使用 system.data.sqlclient.sqlconnection 你可以连接到除 MS-SQL 服务器之外的任何其他东西......
  • 虽然我的工作是使用 mySql。数据库连接器可以为各种数据库引擎/服务器配置,虽然我没有用 ms sql 尝试过。
  • 您的提议是为每个数据库编写一个连接器。那是无关紧要的。看起来我的应用程序毕竟不会是零配置......
【解决方案4】:

DataObjects.Net - 它是为模型优先的方法而设计的;它支持 MS SQL、Oracle 和 PostgreSQL。计划支持 MySQL。

参见ManualDatabase Schema Upgrade 章节 - 它解释了与运行时模式创建和升级相关的详细信息。

与 Signum 框架(实际上非​​常接近它支持的方法)相比,DataObjects.Net 几乎没有与映射相关的限制。例如。您可以使用复合主\外键。它的另一个优点是perfect LINQ support

附:我是它的作者之一。

【讨论】:

  • 我刚刚注意到您也希望创建数据库本身。 DataObjects.Net 目前无法做到这一点,但我立即在我们的问题跟踪器中找到了此功能请求:code.google.com/p/dataobjectsdotnet/issues/detail?id=509 - 很有可能,这将在某一天完成。
  • 顺便说一句,数据库创建确实有点棘手 - 这就是人们避免这样做的原因。例如。有必要指定数据库文件的放置位置(在哪些存储等),设置默认排序规则和编码等选项 - 这些选项中的大多数特定于特定的 RDBMS,因此供应商避免以统一的方式解决此问题.通常应用程序只处理一个(选定的)RDBMS,并且很容易为它实现数据库创建而不涉及 ORM - 这是供应商避免这种情况的另一个原因。
  • 所以实际上,如果你选择 ORM,我建议你更多地关注其他特性。这个问题(数据库创建)实际上只需要您自己解决一天。但其他 ORM 功能将使用数周......
  • 好吧,看来 nhibernate 又多了一个开发人员 ;-))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多