LINQ-to-Entities中是否有DataContext(而不是LINQ-to-SQL)?

7

我最近关于追踪Linq-to-Entities的问题提出了一个问题

我认为其中一个答案是错误的,因为他们提到使用DataContext。LINQ-to-Entities有一个DataContext吗?如果有,我该如何获取它?


1
对于现在看到这个问题的人(该问题已经几年了),DataContext也不应该与Entity Framework 4.1中的DbContext混淆 :-) - Alex KeySmith
4个回答

10

LINQ to Entities使用的是ObjectContext而不是DataContext。

EF的简短描述如下:

LINQ to Entities、ObjectContext类和实体数据模型

LINQ to Entities查询使用对象服务基础结构。ObjectContext类是与EDM交互的主要类,用于CLR对象。开发人员通过ObjectContext构建ObjectQuery实例。通用的ObjectQuery类表示返回一个实例或一组类型化实体的查询。由ObjectQuery返回的实体对象由Object Context跟踪,并且可以使用SaveChanges方法进行更新。

它甚至不像LINQ to SQL中的DataContext那样工作。 虽然它们都管理连接并跟踪更改,但它们在数据结构和关系建模方面有所不同。

我会对那个错误答案的发布者稍加宽容,因为LINQ to SQL确实提到了“实体”,而不熟悉EF的人可能仍然认为他们知道你在谈论什么。

例如:

LINQ to SQL和DataContext类

DataContext是连接到数据库时映射所有实体的来源。它跟踪您对检索到的所有实体所做的更改,并维护一个“标识缓存”,以确保多次检索的实体使用相同的对象实例表示。

这可能会令人困惑。


5

显然,LinqToEntities使用ObjectContext而不是DataContext。

很有趣的是,对象团队制作了一个DataContext,而数据团队制作了一个ObjectContext(以及DataQuery vs ObjectQuery等)。"命名很难!"


更新,对于使用EF4.1的.net 4,当使用LinqToEntities时,您可能还会对DbContext感兴趣。请参见also


1

我想你可能在提到 ADO.NET 实体数据模型(.edmx 文件 - 类似于 .dbml 文件)。

在 VS 中,它可以在添加项目->ADO.NET 实体数据模型中找到。


0

有很多这些任意语法差异。例如,SubmitChanges(L2S)和SaveChanges(L2E)。然而,这只是两种技术之间差异的冰山一角。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接