Есть ли DataContext в LINQ-to-Entities (НЕ Linq-to-SQL)?

Недавно я задал вопрос о трассировке Linq-to-Entities.

Я думаю, что один из ответов был неправильным, поскольку они ссылаются на использование Контекст данных. Существует ли DataContext для LINQ-to-Entities? Если да, то как мне его получить?


person Phobis    schedule 27.09.2008    source источник
comment
Для тех, кто видит этот вопрос сейчас (вопросу несколько лет), DataContext также не следует путать с DbContext, найденным в Entity Framework 4.1 :-)   -  person Alex KeySmith    schedule 10.08.2012


Ответы (4)


LINQ to Entities использует ObjectContext, а не DataContext.

Вот краткое описание EF:

LINQ to Entities, класс ObjectContext и модель данных сущности

Запросы LINQ to Entities используют инфраструктуру Object Services. Класс ObjectContext является основным классом для взаимодействия с EDM как с объектами CLR. Разработчик создает экземпляр ObjectQuery через ObjectContext. Универсальный класс ObjectQuery представляет запрос, который возвращает экземпляр или набор типизированных сущностей. Объекты Entity, возвращаемые ObjectQuery, отслеживаются контекстом объекта и могут быть обновлены с помощью метода SaveChanges.

Он даже не работает так же, как DataContext в LINQ to SQL. Хотя они и управляют подключением, и отслеживают изменения, они различаются тем, как моделируют структуры данных и отношения.

Тем не менее, я бы дал плакату с этим неправильным ответом некоторую слабину, потому что LINQ to SQL действительно ссылается на «сущности», и кто-то, не знакомый с EF, вполне может все еще думать, что знает, о чем вы говорите.

Например:

LINQ to SQL и класс DataContext

DataContext — это источник всех сущностей, отображаемых через соединение с базой данных. Он отслеживает изменения, внесенные вами во все извлеченные объекты, и поддерживает "кэш удостоверений", гарантирующий, что объекты, извлеченные более одного раза, представлены одним и тем же объектом. экземпляр.

Это может сбивать с толку.

person hurst    schedule 27.09.2008

Судя по всему, LinqToEntities использует ObjectContext вместо Контекст данных.

Забавно, что команда, занимающаяся объектами, создала DataContext, а команда, работающая с данными, создала ObjectContext (и на DataQuery против ObjectQuery и т. д.) «Именование — это сложно!»


Обновление, для .net 4 с EF4.1 вас также может заинтересовать DbContext при работе с LinqToEntities. См. также .

person Amy B    schedule 27.09.2008

Я думаю, вы могли бы иметь в виду модель данных объекта ADO.NET (файл .edmx - сопоставим с файлом .dbml).

В VS это видно в Добавить элемент->Модель данных сущности ADO.NET.

person naspinski    schedule 06.01.2009

Существует много этих произвольных синтаксических различий. Например. Отправить изменения (L2S) и сохранить изменения (L2E). Тем не менее, это было бы лишь верхушкой различий между двумя технологиями.

person Eric Nelson    schedule 02.10.2008