EntityFramework 4, DbSet и ObjectContext - PullRequest
       28

EntityFramework 4, DbSet и ObjectContext

5 голосов
/ 22 марта 2012

Несколько дней назад я прочитал учебник по шаблонам GenericRepository и Unit Of Work http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application. Я использую веб-формы и у меня установлен пакет EntityFramework CTP4. (Я не могу использовать EF 5).

Я хочу написать общий репозиторий для моего проекта, но я застрял в этой строке:

this.dbSet = context.Set<TEntity>();

Я знаю, что эта строка не работает, потому что сначала используется ObjectContext в моем проекте и базе данных. Как я могу справиться с этим? Могу ли я кодировать универсальный репозиторий без миграции вначале (что в моем случае невозможно)?

Ответы [ 2 ]

7 голосов
/ 22 марта 2012

Это эквивалент для ObjectContext:

this.dbSet = context.CreateObjectSet<TEntity>();

Теперь это создает ObjectSet<TEntity>, а не DbSet<TEntity>, но для вашего шаблона вы можете использовать его таким же образом.

ОБНОВЛЕНИЕ

Класс ObjectSet не имеет такого вспомогательного метода, который соответствует методу Find() DbSet.Чтобы «получить по ключу», вам нужно создать EntityKey и использовать ObjectContext.GetEntityByKey(), к сожалению, это не так просто.

Там действительно нет 'Я нашел простой способ справиться с этим.В моем случае все, что я сделал, это основал все мои сущности из общего класса (используя пользовательские шаблоны T4 для генерации классов из модели).И тогда я могу добавить общее ограничение к своим репозиториям, например:

public class MyRepository<TEntity> where TEntity : MyEntityBaseClass

И тогда мой общий базовый класс имеет поле Id, которое наследуется всеми сущностями, поэтому я могу просто сделать:

return myObjectSet.SingleOrDefault(x => x.Id == myId);

Я уверен, что есть другие подходы, которые могут быть хорошей темой для другого вопроса.

4 голосов
/ 22 марта 2012

1. Вы хотите добавить шаблон DbContextGenerator в шаблоны визуальной студии:

DbContextGenerator template

2. После этого убедитесь, что вы удалили инструмент генерации по умолчанию в файле .edmx.

Code generation tool

3. Теперь вы можете реализовать шаблон GenericRepository по своему желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...