数据库优先方法中的Linq-to-SQL vs Entity Framework

joh*_* Gu 0 c# orm entity-framework linq-to-sql

我对使用数据库第一种方法时Linq-to-SQL和Entity Framework之间的差异感到困惑,因为我找不到任何明显的差异.

在我使用Linq-to-SQL的情况下,我曾经创建表,然后我使用Linq-to-SQL创建表示表的类,现在当我切换到Entity Framework时,我仍然遵循相同的步骤(创建数据库表,然后使用EF创建关联的类).

我以相同的方式与这些类进行交互,例如,我曾经使用相同的语法和方法查询User类,但有一次User使用Linq-to-SQL创建类,而另一次使用Linq-to-SQL创建类时EF,那么区别在哪里

        public IQueryable<User> findstudents(string term)
        {
            return from student in entities1.Users
                   where student.UserID.Contains(term)
                   select student;

        }
Run Code Online (Sandbox Code Playgroud)

第二个问题,如果我使用EF将表映射到类,是否仍然可以在同一个应用程序中使用Linq-to-SQL来查询EF类?

mar*_*c_s 9

LINQ是一种基础技术 - 这种语法为您提供了C#中的SQLish查询选项 - 这完全独立于您使用Linq-to-SQL还是EF.因此,如果您想使用LINQ语法查询数据类 - 您可以使用两个框架来执行此操作 - 但是一旦使用Linq-to-SQL并使用Linq-to-Entities.您不能对实体框架EDMX模型使用Linq-to-SQL.

Linq-to-SQL很棒

  • 如果您需要非常简单的1:1映射 - 一个表等于域模型中的一个类
  • 如果除了SQL Server之外你什么都不需要(Linq-to-SQL不支持其他任何东西)
  • 如果你想快速启动和运行

另一方面,实体框架

  • 支持多个后端(SQL Server,Oracle,Firebird - 其他可能会跟随)
  • 支持完整的概念数据建模策略 - 您可以在数据库中定义物理模型,在应用程序中定义概念模型,以及在两者之间进行映射
  • 使您能够处理将单个业务实体映射到多个表的操作
  • 支持每个层次结构表和每个类的表继承方案
  • 当事情发生变化时,支持从数据库刷新/更新模型(EDMX文件)(在Linq-to-SQL中,你基本上必须删除+重新创建所涉及的实体 - 从而放弃你可能做的所有自定义)

简而言之:Linq-to-SQL对于SQL Server来说是一个伟大的,简单的,精益的'OR'mean ORM - 如果它能满足您的需求,请使用它.实体框架是一个非常不同的野兽,功能更强大,但也更复杂,更大 - 适合您的下一个关键企业应用程序,但可能对您的个人博客应用程序来说太过分了:-)

如果你想创造一种"面向未来"的东西,并且将使用微软推动未来的OR技术,那么你应该选择Entity Framework.特别是在v4中,它也更容易使用,比以前更精简,更有用.