Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server ORM vs SQLXML,非常简单的中间层_Sql Server_Entity Framework_Orm - Fatal编程技术网

Sql server ORM vs SQLXML,非常简单的中间层

Sql server ORM vs SQLXML,非常简单的中间层,sql-server,entity-framework,orm,Sql Server,Entity Framework,Orm,我知道这是一个相当激烈的问题。但不管怎样,我还是想听听Stackoverflow中那些人的意见。鉴于SQL Server 2005/2008中对XML的支持非常好,而且不关心数据库的独立性,如果使用POCO、XmlSerializer和处理XML的存储过程,为什么需要Linq to SQL、Entity Framework、NHibernate等在高级用例中非常复杂和笨拙的东西,一个人可以实现一个简单得多的中间层?有关参考信息,请参阅链接:数据库中的XML序列化和XML列可能很难使用,但我相信您

我知道这是一个相当激烈的问题。但不管怎样,我还是想听听Stackoverflow中那些人的意见。鉴于SQL Server 2005/2008中对XML的支持非常好,而且不关心数据库的独立性,如果使用POCO、XmlSerializer和处理XML的存储过程,为什么需要Linq to SQL、Entity Framework、NHibernate等在高级用例中非常复杂和笨拙的东西,一个人可以实现一个简单得多的中间层?有关参考信息,请参阅链接:

数据库中的XML序列化和XML列可能很难使用,但我相信您可以使其正常工作。您仍然需要克服诸如循环引用之类的标准ORM挑战。SQL查询对于XML数据库列来说可能非常笨拙

我认为在高级用例中复杂的不是ORM,而是对象-关系不匹配在高级用例中复杂。我看不出XML和存储产品如何以更好的方式真正解决这些高级用例

XML本质上不是关系型或面向对象的,您正在为混合添加一个额外的不匹配项。

我担心的是“不太复杂的中间层”。。。ORM的要点是确保大部分复杂性与您的实际域相关(无论是订单处理、提要读取还是其他)。这种复杂性肯定会有所进展。你最不希望看到这种复杂性的地方是数据库,它是你最不容易扩展的商品(你通常会扩大数据库服务器的规模(这很昂贵),而当你缩小应用服务器的规模时(要便宜得多))


可能存在使用文档数据库而不是关系数据库的情况,但RDBMS不会有任何进展。一般来说,我建议:将您在数据库中的xml使用量限制在合理的范围内。It可能是一个非常有效的工具,但请注意不要创建内部平台。关系数据库(无论由哪家供应商提供)在其工作中都是独一无二的,具有复杂的索引、ACID、引用完整性等。。。利用这种力量。

谢谢你,迈克尔。虽然可以有XML列,但我在这里讨论的是普通的int、varchar等列。使用“FOR XML”语句,我可以轻松地在存储过程中创建XML并发送到客户端。通过ADO.NET命令,我还可以轻松地将xml发送到存储过程。一旦进入存储过程,我就可以完全灵活地处理即将到来的xml,比如构建自己的并发处理逻辑。但是如果你使用ORM,我觉得,你可能不得不处理大量生成的/臃肿的代码,最终可能无法完成你真正想做的事情。@synergetic:听起来像是在向对象和关系表添加XML,实际上你现在又遇到了另一个阻抗不匹配。一般来说,ORMs不需要“生成”代码,您可能需要花更多的时间来处理高质量的ORMs,然后才能轻易地将它们丢弃。在代码和存储过程之间划分业务逻辑是大多数开发人员试图避免的事情。谢谢Michael。你用什么?你能给我推荐一个吗?@synergetic:谢谢你,马克。在我看来,XML对于CRUD应用程序来说是非常有吸引力的选择。所有领域数据最终都会进入数据库,它们之间复杂的相互关系也是如此。那么,为什么不将数据库密集型任务(如并发管理)放在数据库级别,而不是依赖ORM的更改管理呢?@synergetic——好吧,并发不一定是最密集的数据库。许多系统都是读密集型的。在这里,乐观并发可能会大大降低成本,但仍然提供了所有的安全性。