C# 如何在ASP.NET MVC中选择数据访问方法?

C# 如何在ASP.NET MVC中选择数据访问方法?,c#,asp.net-mvc,linq-to-sql,entity-framework,C#,Asp.net Mvc,Linq To Sql,Entity Framework,我用C#2.0 WinForms编程已经有一段时间了。我开始学习ASP.NET和新的MVC框架以及C#3.5的新特性。我只读了一点关于LINQtoSQL的内容,但已经制作了一些测试应用程序来尝试它。在我的WinForms应用程序中,我通常有某种数据访问层,并自己编写所有SQL。当然,如果有什么能帮我解决这个问题,我完全赞成 我遵循了www.asp.net/mvc网站上的教程,完成了实体框架示例和linqtosql示例。到目前为止,它们看起来都很相似。LINQ更像SQL,但实体框架更像C 我的问题

我用C#2.0 WinForms编程已经有一段时间了。我开始学习ASP.NET和新的MVC框架以及C#3.5的新特性。我只读了一点关于LINQtoSQL的内容,但已经制作了一些测试应用程序来尝试它。在我的WinForms应用程序中,我通常有某种数据访问层,并自己编写所有SQL。当然,如果有什么能帮我解决这个问题,我完全赞成

我遵循了www.asp.net/mvc网站上的教程,完成了实体框架示例和linqtosql示例。到目前为止,它们看起来都很相似。LINQ更像SQL,但实体框架更像C

我的问题是:

  • 一种方法比另一种好吗
  • 两者相比有什么好处
  • 当使用这两种方法中的任何一种时,是否可以看到生成的SQL
  • 由于我是ASP世界的新手,web开发人员是否偏袒一方

  • 2:LINQtoSQL的优点是简单(但仍然设计得很好),但缺点是简单-p

    • LINQ to SQL仅在SQL Server上工作(实体框架是可插拔的;LINQ to SQL的第三方变体(如DBLinq)包括一些其他提供商)
    • 实体框架支持数据(存储)模型和对象模型之间的更多抽象-LINQ to SQL是文字表/列=>类/属性[|字段]
    • LINQ到SQL实际上在它所做的事情上更加“完整”:
      • EF不支持UDF
      • EF不支持子表达式调用(对于自定义表达式树)
      • EF不支持一些“明显的”方法,如
        Single()
      • EF没有LINQtoSQL使用的一些TSQL优化
    基本上,目前EF更像是“v1”(甚至是“v0.9”)产品然而(重要的是)-EF很可能在.NET 4.0等中有一个合适的下一个版本,而LINQ到SQL的变化要小得多。的确如此,但以微软作为旗舰产品而闻名(而不是将这两种产品共同进化为彼此)。你应该考虑一下长期计划

    目前,但EF是长期的。。。所以我使用repository等来隐藏一些血淋淋的实现细节——有点泄漏的存储库

    3:使用LINQ to SQL,将
    TextReader
    分配给
    dataContext.Log
    Console.Out
    运行良好-或者我有一个可以写入trace.asax的。使用EF


    4:我怀疑它的复杂性会导致很多问题。使用具有简单模型的SQL Server的人,或者乐于拥有一个适合对象模型的存储模型的人,目前倾向于使用LINQ to SQL(据我所见)。更复杂的人和其他数据库倾向于使用NHibernate-然后是一些EF。我想知道,当EF下一次在.NET 4.0中发布时,这会有多大的变化…

    2:LINQ to SQL具有简单的优点(但仍然经过良好的设计)-但简单的缺点-p

    • LINQ to SQL仅在SQL Server上工作(实体框架是可插拔的;LINQ to SQL的第三方变体(如DBLinq)包括一些其他提供商)
    • 实体框架支持数据(存储)模型和对象模型之间的更多抽象-LINQ to SQL是文字表/列=>类/属性[|字段]
    • LINQ到SQL实际上在它所做的事情上更加“完整”:
      • EF不支持UDF
      • EF不支持子表达式调用(对于自定义表达式树)
      • EF不支持一些“明显的”方法,如
        Single()
      • EF没有LINQtoSQL使用的一些TSQL优化
    基本上,目前EF更像是“v1”(甚至是“v0.9”)产品然而(重要的是)-EF很可能在.NET 4.0等中有一个合适的下一个版本,而LINQ到SQL的变化要小得多。的确如此,但以微软作为旗舰产品而闻名(而不是将这两种产品共同进化为彼此)。你应该考虑一下长期计划

    目前,但EF是长期的。。。所以我使用repository等来隐藏一些血淋淋的实现细节——有点泄漏的存储库

    3:使用LINQ to SQL,将
    TextReader
    分配给
    dataContext.Log
    Console.Out
    运行良好-或者我有一个可以写入trace.asax的。使用EF


    4:我怀疑它的复杂性会导致很多问题。使用具有简单模型的SQL Server的人,或者乐于拥有一个适合对象模型的存储模型的人,目前倾向于使用LINQ to SQL(据我所见)。更复杂的人和其他数据库倾向于使用NHibernate-然后是一些EF。我想知道当EF下一次在.NET 4.0中发布时,这会有多大变化…

    使用对您、您的团队和您的项目最合适的版本。如何访问数据并不重要,只要访问数据就行


    如果您愿意,您可以使用普通的旧ADO.NET。

    使用最适合您、您的团队和您的项目的ADO.NET。如何访问数据并不重要,只要访问数据就行


    如果您愿意,您可以使用普通的旧ADO.NET。

    我忘了提到;LINQtoSQL(使用当前版本)有一个更好的POCO故事;由于对这个[和其他事情](见:)感到悲伤,我希望4.0版的POCO故事会更好。从Marc的描述来看,我认为我做的事情与他相似。(与此处使用的模式类似:)。在数据和服务层中一定要使用EF。将MSSQL集成映射回LINQ-SQL,但保留中间层EF-从长远来看,这将使您受益最大。@cottsak-如果您同时使用LINQ-to-SQL和EF,那么这与我的完全不同-皮忘了提;林克托