Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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
C# 2013年末使用Oracle数据库的.NET应用程序的数据访问选项有哪些?_C#_Asp.net_.net_Oracle_Nhibernate - Fatal编程技术网

C# 2013年末使用Oracle数据库的.NET应用程序的数据访问选项有哪些?

C# 2013年末使用Oracle数据库的.NET应用程序的数据访问选项有哪些?,c#,asp.net,.net,oracle,nhibernate,C#,Asp.net,.net,Oracle,Nhibernate,我目前正在开发一个新版本的ASP.NET MVC应用程序,它有一个Oracle数据库后端。当我开始开发时,我惊讶地发现它只是使用ADO.NET命令连接到Oracle。在与另一位开发人员交谈后,我发现他们去年尝试切换到实体框架,但框架存在许多性能问题,他们不想再次重复这些问题 我正试图找出其他的选择: 继续使用ADO.NET并构建一个封装数据库调用的包装类。基本上是企业库DAAB的自定义轻型版本。 使用企业库DAAB 使用NHibernate 由于性能问题,实体框架不是一个选项 每种方法都有缺点。

我目前正在开发一个新版本的ASP.NET MVC应用程序,它有一个Oracle数据库后端。当我开始开发时,我惊讶地发现它只是使用ADO.NET命令连接到Oracle。在与另一位开发人员交谈后,我发现他们去年尝试切换到实体框架,但框架存在许多性能问题,他们不想再次重复这些问题

我正试图找出其他的选择:

继续使用ADO.NET并构建一个封装数据库调用的包装类。基本上是企业库DAAB的自定义轻型版本。 使用企业库DAAB 使用NHibernate 由于性能问题,实体框架不是一个选项 每种方法都有缺点。由于Microsoft的OracleClient提供程序在.NET Framework的4.0版中已被弃用,因此只有使用Oracle的ODP.NET提供程序才有意义。这是企业库的一个问题,因为当前版本6.0仍然使用Microsoft的OracleClient。看起来有人用OracleClient替换了对ODP.NET的引用,但它似乎不是一个大的群体,所以我担心我们会遇到问题,如果遇到问题,我们的资源就很少

NHibernate使用ODP.NET,但开发速度已经放缓,他们仍然没有发布基于.NET4.0的更新版本,尽管它已经发布了3年。开始新的NHibernate努力似乎并不明智

创建包装器类将允许我们使用ODP.NET,但这是一项大量的工作。如果存在更好的解决方案,我讨厌花时间重新创建轮子

目前,我们只需为ADO.NET创建一个轻型包装器。2013年末是否有其他有效选项?我需要一个由公司支持或拥有活跃社区的选项,这样当我们遇到问题时就不会单独飞行

更新
查看Enterprise Library Contrib项目中带有Oracle ODP.NET数据提供程序v6.0的企业库DAAB。有没有人有过这方面的经验

也许你会感兴趣


我正是以这种方式将ODP for.Net与VS工具结合使用的,它的工作原理很好。

也许这对您来说会很有趣


我正是以这种方式将ODP for.Net与VS工具结合使用的,它的工作原理很好。

我仍然在.NET4.5上使用NHibernate3.1。它工作得很好。我的项目已经发展到300kloc,在管理NHibernate方面没有任何问题。除非您需要一些NHibernate在.NET4.5下无法实现的功能,否则我认为NHibernate没有问题


然而,由于NHibernate很复杂,团队中最好有具有NHibernate/Hibernate经验的人。他将在使用NHibernate方面为其他人提供很多帮助。

我仍然在使用.NET4.5上的NHibernate3.1。它工作得很好。我的项目已经发展到300kloc,在管理NHibernate方面没有任何问题。除非您需要一些NHibernate在.NET4.5下无法实现的功能,否则我认为NHibernate没有问题


然而,由于NHibernate很复杂,团队中最好有具有NHibernate/Hibernate经验的人。他将在使用NHibernate方面为其他人提供很多帮助。

我目前正在从事一个项目,该项目使用实体框架和Oracle 11g via


与VisualStudio集成,以及一个名为ORM的独立ORM工具,当对数据库进行更改时,我们使用该工具来构建和重新构建模型

我目前在一个项目上工作,该项目使用实体框架和Oracle 11g via


与VisualStudio集成,以及一个名为ORM的独立ORM工具,当对数据库进行更改时,我们使用该工具来构建和重新构建模型

我已经在Oracle和SQL Server上与NHibernate合作一段时间了。每当您使用对象图/树创建更复杂的数据结构时,您可能会很快遇到臭名昭著的N+1问题,这可能会给您带来实体框架的性能问题。想象一下常见的Blog/Blog条目/评论示例:加载20个Blog,每个Blog条目中包含20个Blog条目,每个条目上包含10条评论,这将导致对Blog执行1+1 select查询,对条目执行20+N查询,对下一级的所有评论执行200次查询,而无需进一步优化。基本的选择是在延迟加载和N+1之间,或者是在每个博客行发生200次的情况下加入一个相当大的连接。这对于三个级别来说可能不太合适,但对于7个级别来说绝对不行

NHibernate有一些很好的方法来解决这个问题,比如集合批处理,它获取10、20、50或多少个父对象的子对象。据我所知,EF只有N+1延迟加载和加入两种选择,如果我错了,请纠正我!,大多数自制或轻量级地图绘制程序可能也有同样的问题。这只是从规范化关系模式加载对象数据的问题

通过ORM将关系数据映射到对象并不是很大的工作和性能问题,而是数据库访问以及不充分/错误的实现

此外,NHibernate有很好的机会重用数据库中已经存在的查询计划,大多数DBMS通过SQL字符串相等性来检查这一点,避免对每个查询进行代价高昂的重新计算。我认为这是目前可用的最成熟的ORM,EF现在和将来都会远远落后于他们,他们首先关注的是易用性

将NHibernate与Oracle一起使用时,请使用ODP.NET驱动程序;旧的Microsoft驱动程序仍然可以使用,但有严重的缺点,破坏了前面提到的一些功能

然而,NHibernate很难理解和实现;我花了很长时间才了解有多少映射真正起作用。不了解工作单元模式、不使用Save显式地插入/更新数据库、避免复杂的关系映射和其他困难常常导致错误的实现和较差的性能。只需搜索NHibernate反模式就可以找到这些陷阱!另外,我也担心它可能很快就会被放弃。也许是因为最近的NoSQL炒作,或者是因为没有人想与实体框架竞争


但是,如果您不需要经典的OLTP样式的数据库,也不需要复杂的事务、连接和ACID,那么可以选择文档数据库NoSQL。如果是这样的话,如果性能重要的话,NHibernate似乎仍然是最好的。

我已经在Oracle和SQL Server上与NHibernate合作了一段时间。每当您使用对象图/树创建更复杂的数据结构时,您可能会很快遇到臭名昭著的N+1问题,这可能会给您带来实体框架的性能问题。想象一下常见的Blog/Blog条目/评论示例:加载20个Blog,每个Blog条目中包含20个Blog条目,每个条目上包含10条评论,这将导致对Blog执行1+1 select查询,对条目执行20+N查询,对下一级的所有评论执行200次查询,而无需进一步优化。基本的选择是在延迟加载和N+1之间,或者是在每个博客行发生200次的情况下加入一个相当大的连接。这对于三个级别来说可能不太合适,但对于7个级别来说绝对不行

NHibernate有一些很好的方法来解决这个问题,比如集合批处理,它获取10、20、50或多少个父对象的子对象。据我所知,EF只有N+1延迟加载和加入两种选择,如果我错了,请纠正我!,大多数自制或轻量级地图绘制程序可能也有同样的问题。这只是从规范化关系模式加载对象数据的问题

通过ORM和back将关系数据映射到对象并不是很大的工作和性能问题,而是数据库访问以及不充分/错误的实现

此外,NHibernate有很好的机会重用数据库中已经存在的查询计划,大多数DBMS通过SQL字符串相等性来检查这一点,避免对每个查询进行代价高昂的重新计算。我认为这是目前可用的最成熟的ORM,EF现在和将来都会远远落后于他们,他们首先关注的是易用性

将NHibernate与Oracle一起使用时,请使用ODP.NET驱动程序;旧的Microsoft驱动程序仍然可以使用,但有严重的缺点,破坏了前面提到的一些功能

然而,NHibernate很难理解和实现;我花了很长时间才了解有多少映射真正起作用。不了解工作单元模式、不使用Save显式地插入/更新数据库、避免复杂的关系映射和其他困难常常导致错误的实现和较差的性能。只需搜索NHibernate反模式就可以找到这些陷阱!另外,我也担心它可能很快就会被放弃。也许是因为最近的NoSQL炒作,或者是因为没有人想与实体框架竞争


但是,如果您不需要经典的OLTP样式的数据库,也不需要复杂的事务、连接和ACID,那么可以选择文档数据库NoSQL。如果你这样做了,如果性能重要的话,NHibernate看起来仍然是最好的。

该团队去年尝试了EF,但问题太多了。所以EF不是一个选项。我认为你应该自己评估一下。此外,自去年以来,还有新版本-ODAC 12c发行版1 12.1.0.1.0,带有Oracle Developer Tools for Visual Studio团队去年尝试了EF,但出现了太多问题。所以EF不是一个选项。我认为你应该自己评估一下。另外,自去年以来还有新版本-ODAC 12c发行版1 12.1.0.1.0,带有Oracle Developer Tools for Visual Studiotry新的完全托管odp.net。@tbone,据我所知,它不是一个数据访问工具,只是一个托管库版本驱动程序。或者我遗漏了什么?不知道你说的数据访问工具是什么意思,但是如果你在写

C代码,可以使用odp.net访问Oracle。您似乎希望避免ORM选项EF或NHiBiNet,因此您可以考虑中间件服务。尝试新的完全管理的ODP.NET.@ tBoin,从我所读的不是数据访问工具,它只是一个托管库版本驱动程序。或者我遗漏了什么?我不知道你说的数据访问工具是什么意思,但如果你在写C代码,你可以使用odp.net访问Oracle。您似乎想要避免ORM选项EF或NHiBiNess,因此您可能会考虑中间件服务。我们在.NET4.5上使用NHibernate3.3,没有任何问题。我真的看不出只有.NET4.0版本的NHibernate除了打破向后兼容性之外还能获得什么。我想这将允许他们清理一些旧的依赖项,比如Iesi集合。这就是说,NHibernate团队正在开发一个——他们最近发布了NHibernate 4.0的alpha版本,我认为它应该以.NET4.0为目标——至少我听说了这一点。过去,我们曾使用NHibernate将MS SQL Server、Oracle和AS400作为目标。它真的是一个多功能的工具。是的,NHibernate真的是多功能的。我们的系统起初只支持Sql Server,然后,当它已经相当大时,管理层命令我们增加对Oracle的支持。只花了几天时间。然而,我知道有些球队在NHibernate的比赛中惨败。他们不知道如何正确使用NHibernate,其中一些人成为了NHibernate的批评者,总是建议人们远离NHibernate。团队中没有人拥有NHibernate的经验,因此在复杂的环境中有很好的指导。我仍然觉得奇怪的是,基于.NET4我花了3年的时间才得到一个alpha。我也将从NHibernate阵营中添加一个me。我目前正在3.3和Oracle中使用它。我在幕后使用了旧的非托管Oracle驱动程序,但尝试了托管Oracle客户端,它工作得很顺利。无法转到托管客户端,因为仍有一些客户运行托管客户端不支持的Oracle 9i。Oracle托管驱动程序位于NH4.0中,并且删除了frm IESI.NHibernate的依赖项。可扩展性是一个重要原因。稍后,一旦您需要更多自定义内容,您将看到您可以创建自己的ICriterion、IResultTransformer、更改缓存提供程序的实现。。。从任何角度来看,除了一个简短的介绍,NHibernate都会像预期的那样完成工作,只是和我打个招呼而已!我们在.NET4.5上使用NHibernate3.3,没有任何问题。我真的看不出只有.NET4.0版本的NHibernate除了打破向后兼容性之外还能获得什么。我想这将允许他们清理一些旧的依赖项,比如Iesi集合。这就是说,NHibernate团队正在开发一个——他们最近发布了NHibernate 4.0的alpha版本,我认为它应该以.NET4.0为目标——至少我听说了这一点。过去,我们曾使用NHibernate将MS SQL Server、Oracle和AS400作为目标。它真的是一个多功能的工具。是的,NHibernate真的是多功能的。我们的系统起初只支持Sql Server,然后,当它已经相当大时,管理层命令我们增加对Oracle的支持。只花了几天时间。然而,我知道有些球队在NHibernate的比赛中惨败。他们不知道如何正确使用NHibernate,其中一些人成为了NHibernate的批评者,总是建议人们远离NHibernate。团队中没有人拥有NHibernate的经验,因此在复杂的环境中有很好的指导。我仍然觉得奇怪的是,基于.NET4我花了3年的时间才得到一个alpha。我也将从NHibernate阵营中添加一个me。我目前正在3.3和Oracle中使用它。我在幕后使用了旧的非托管Oracle驱动程序,但尝试了托管Oracle客户端,它工作得很顺利。无法转到托管客户端,因为仍有一些客户运行托管客户端不支持的Oracle 9i。Oracle托管驱动程序位于NH4.0中,并且删除了frm IESI.NHibernate的依赖项。可扩展性是一个重要原因。稍后,一旦您需要更多自定义内容,您将看到您可以创建自己的ICriterion、IResultTransformer、更改缓存提供程序的实现。。。除了简短的演示之外,从任何角度来看,NHibernate都会像预期的那样完成工作,但看起来他们并不首先支持EF代码,这对我来说都不是第一步。Josh,是的。不是我测试过自己,而是@Josh-我们正在做数据库优先EF工作,因为这是一个可以追溯到几年前的遗留应用程序。很有趣,但看起来他们不支持EF代码优先,这对我来说是不可能的。Josh,是的。不是我测试过自己,而是@Josh-我们正在做数据库优先EF工作,因为这是一个可以追溯到几年前的遗留应用程序。您可以通过NHibernate很好地突出这个问题。这是一个很好的框架,但它的复杂性让新的采用者感到惊讶
y、 我不认为EF是一个简单的东西,因为对象关系问题本身就很难解决,任何ORM也是如此。我不相信英孚能占领ovee NHibernate社区。NH是社区的产品,服务于社区,而EF是Microsoft的孩子,来自一个与社区正在解决的问题没有真正联系的团队。您通过NHibernate很好地强调了这个问题。这是一个很好的框架,但它的复杂性让新的采用者胆怯,更令人担心的是,它似乎正在失去它的社区给EF。我不认为EF更简单,因为对象关系问题天生就很难,任何ORM也是如此。我不相信英孚能占领ovee NHibernate社区。NH是社区的产物,服务于社区,而EF是微软的孩子,来自一个与社区正在解决的问题没有真正联系的团队。