Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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#和.NET的数据访问框架/方法?_C#_.net_Asp.net_Sql - Fatal编程技术网

哪一个是;“最佳”;C#和.NET的数据访问框架/方法?

哪一个是;“最佳”;C#和.NET的数据访问框架/方法?,c#,.net,asp.net,sql,C#,.net,Asp.net,Sql,(编辑:我把它变成了一个社区维基,因为它更适合协作形式。) 从.NET访问SQL Server和其他数据库的方法很多。所有人都有自己的优点和缺点,这永远不会是一个简单的问题,哪一个是“最好的”-答案永远是“视情况而定” 然而,我希望在不同层次的系统背景下对不同的方法和框架进行高层次的比较。例如,我可以想象,对于一个快速而肮脏的Web2.0应用程序,答案将与内部企业级CRUD应用程序大不相同 我知道有很多关于堆栈溢出的问题涉及到这个问题的子集,但是我认为尝试建立一个总结性的比较是有用的。我将努力在

(编辑:我把它变成了一个社区维基,因为它更适合协作形式。)

从.NET访问SQL Server和其他数据库的方法很多。所有人都有自己的优点和缺点,这永远不会是一个简单的问题,哪一个是“最好的”-答案永远是“视情况而定”

然而,我希望在不同层次的系统背景下对不同的方法和框架进行高层次的比较。例如,我可以想象,对于一个快速而肮脏的Web2.0应用程序,答案将与内部企业级CRUD应用程序大不相同

我知道有很多关于堆栈溢出的问题涉及到这个问题的子集,但是我认为尝试建立一个总结性的比较是有用的。我将努力在我们进行时对问题进行更正和澄清

到目前为止,这是我在高水平上的理解-但我确信这是错误的。。。 我主要关注的是微软保持这一关注的方法

  • 数据库不可知论
  • 很好,因为它允许交换后端
  • 不好,因为它会影响性能,数据库供应商对此不太满意
  • 似乎是微软未来的首选路线
  • 学习起来很复杂(不过,请参见)
  • 它是通过提供的ORM访问的,因此允许在代码中进行抽象
  • 不确定的未来(见)
  • 易学(?)
  • 仅适用于MS SQL Server
  • 另见
“标准”ADO.NET
  • 没有ORM
  • 没有抽象,所以您可以回到“自己动手”并使用动态生成的SQL
  • 直接访问,允许潜在更好的性能
  • 这与是否关注对象或关系数据这一由来已久的争论有关,答案当然是“这取决于大部分工作在哪里”,因为这是一个无法回答的问题,希望我们不必过多讨论这个问题。IMHO,如果您的应用程序主要处理大量数据,那么在前端代码中将其过度抽象为对象是没有意义的,最好使用存储过程和动态SQL在后端尽可能多地完成工作。然而,如果主要是用户交互,这会导致在数十行或数百行的级别上进行数据库交互,那么ORM是完全有意义的。因此,我想我支持老式ADO.NET的理由应该是在您操作和修改大型数据集的情况下,在这种情况下,您将受益于对后端的直接访问
  • 当然,另一种情况是,您必须访问已经由存储过程保护的遗留数据库
ASP.NET数据源控件 这些是完全不同的还是只是标准ADO.NET上的一层? -如果您有DAL或实现LINQ或实体,您真的会使用这些吗

亚硝酸铵
  • 似乎是一个非常强大的ORM
  • 开源
其他相关环节,;

我认为LINQ to SQL适合针对SQL Server的项目

如果我们针对不同的数据库,ADO.NET实体框架会更好。目前,我认为ADO.NET实体框架、PostgreSQL、MySQL、esql、Oracle和许多其他(检查)的提供程序有很多


我不想再使用标准ADO.NET了,因为这是浪费时间。我总是选择ORM。

我曾经处理过20多个不同的C#/ASP.NET项目,最终我总是使用它。我通常从一个完全不同的堆栈开始—ADO.NET、ActiveRecord和手工滚动wierdness。NHibernate可以在多种情况下工作的原因有很多,但对我来说最突出的是节省时间,特别是在与代码生成相关联的情况下。您可以更改数据模型,然后重建实体,但大多数/所有其他代码都不需要更改


微软确实有一个讨厌的习惯,那就是在这一领域推广与现有开源并行的技术,然后在技术不成熟时放弃它们。有人还记得ObjectSpaces吗?

我必须说,我从来没有使用过NHibernate,因为我需要很长时间才能开始使用。。。在XML设置上浪费的时间

我最近在MVC2中开发了一个web应用程序,在这里我选择了ADO实体框架,并且一直使用Linq

我必须说,我对速度印象深刻!我们的网站每天有大约35000个独立访客,每天大约60Gb的带宽(我通过在AmazonS3中托管所有静态文件,从根本上减少了这个60Gb的数字,我必须说,AmazonS3是他们拥有的很棒的.NET包装器)


我会一直走这条路。它很容易启动(只需添加新的数据项,选择表,就可以了!对于数据库中的每一个更改,我们只需要刷新模型-只需单击两次即可自动完成),而且使用Linq规则很有趣

新增新技术:

随着Microsoft Sql Server for Linux目前处于测试阶段,我认为不依赖数据库是可以的。Net核心路径和MS-SQL路由允许您在像Ubuntu这样的Linux服务器上运行,而不依赖windows

因此,在imo中,一个非常好的流程是不使用完整的ORM框架或数据控件,并利用SSDT Visual Studio项目(Sql Server数据工具)和微型ORM的强大功能

在Visual Studio中,可以将Sql Server项目创建为合法的Visual Studio项目。这样做允许您通过VisualStudio中的表设计器或原始查询编辑创建整个数据库

其次,您可以使用SSDT的模式比较工具将数据库项目与microsoftsqlserver中的实时数据库进行比较并进行更新。你可以同步你的视频
var people = dbContext.Fetch<Person>("SELECT * FROM People where Username Like '%@0%'", "bob");