【问题标题】:abstract database away for dynamically generated sql in C#在 C# 中为动态生成的 sql 抽象数据库
【发布时间】:2014-06-05 03:04:00
【问题描述】:

我将数据动态导入数据库,在其中动态创建新表并存储元数据,以便以后可以通过动态构造的 SQL 访问这些表。我的问题是,对于 C#,是否有一个库可供我使用,可以抽象出 SQL 本身的一些细节?我遇到的情况是序列(尽管还有其他)。在 Oracle 中访问序列看起来像这样

select foo.nextVal from dual;

在 Postgres 中...

select currval('foo_id_seq');

对于我的项目,我不知道最终的数据库会是什么,而且我不喜欢通过运行项目来修复由于 SQL 错误而导致的一堆错误的想法。

我查看了 NHibernate,它看起来像这样的工具(Linq to SQL)需要一个现有的对象模型。我没有对象模型,因为我的所有数据都是动态提供的,我不知道列数、数据类型等。

感谢任何建议的解决此问题的方法。

【问题讨论】:

  • 动态创建的表格听起来像是个坏消息。真的没有办法了吗?
  • 基本上是我们的客户上传文件。我们不知道文件的数量、数据类型、它们之间的关系、行数、列数等等​​。一段时间以来,我们使用动态构造取得了很大的成功。
  • 对动态生成的数据使用 XML 列。
  • 我不想采用这种方法,因为我可以动态构建 SQL 并非常快速地修改数据。反序列化和搜索 XML 数据非常耗时。

标签: c# sql orm


【解决方案1】:

如果您尝试存储的数据具有动态结构,那么听起来关系数据库可能不是最佳选择。它的优势在于静态结构化和定义明确的数据。像MongoDB 这样专为动态模式设计的面向文档的存储可能会更好地为您服务。如果您使用 MongoDB 之类的东西,我认为您关于为动态变化的架构抽象查询生成的问题就会消失。

也就是说,SQL Server 等一些关系数据库对 XML 数据类型有很好的支持,允许您在静态模式中指定任意结构。 SQL Server 还允许您直接查询 XML 数据类型and even index them,这意味着您可以在服务器端进行查询,而无需将 XML 传输回客户端、反序列化等。决定这是否足够好您必须使用代表生产负载的数据来测试您的需求。

【讨论】:

    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    相关资源
    最近更新 更多