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

时间:2012-01-26 04:45:39

标签: c# entity-framework linq-to-sql orm

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

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

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

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

        }

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

1 个答案:

答案 0 :(得分: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来说是一个伟大的,简单的,精益的“ORM”ORM - 如果它能满足您的需求,请使用它。实体框架是一个非常不同的野兽,更强大,但也更复杂,更大 - 适合您的下一个关键企业应用程序,但可能对您的个人博客应用程序有点过分: - )

如果您想创建“面向未来”的东西,并且将使用Microsoft推动未来的OR技术,那么您应该使用Entity Framework。特别是在v4中,它也更容易使用,比以前更精简,更有用。