Entity Framework 4, POCO: более понятный способ ограничения EF POCO, кроме того, где E: класс? - PullRequest
0 голосов
/ 21 декабря 2010

Статья Моршеда Анвара "Реализация шаблона репозитория с помощью Entity Framework" начинается с этого в верхней части его репозитория:

public class Repository<E, C> : IRepository<E, C>, IDisposable
    where E : EntityObject
    where C : ObjectContext
{ ... }

Скажем, вы хотите использовать объект ASP.NET POCOГенератор, вы можете изменить EntityObject на class.Однако, чтобы получить все свойства объекта EntityObject, вам нужно будет использовать рефлексию, чтобы определить, что класс действительно обладает всеми свойствами и методами объекта EntityObject.

Есть ли лучшее ограничение, кромеclass мы могли бы заменить EntityObject, используя ASP.NET POCO Entity Generator , чтобы раскрыть свойства и методы EntityObject, обычно доступные с использованием where E : EntityObject?

Ответы [ 2 ]

3 голосов
/ 21 декабря 2010

Прежде всего, реализация Generic Repository выглядит ужасно (на мой взгляд, CodeProject, в общем, был неутешительным источником хороших примеров).Там нет двух способов обойти это.

При использовании объектов POCO, на самом деле нет причин для размышлений.Воспользуйтесь преимуществом метода EntityContext.CreateObjectSet<T> и позвольте Entity Framework позаботиться о деталях.

Если вы хотите взглянуть на гораздо более чистую реализацию универсального репозитория, посмотрите:

Элегантный код >> Entity Framework POCO (EF4): общий репозиторий и единица работы

1 голос
/ 21 декабря 2010

Я думаю, вы неправильно понимаете концепцию «POCO»;POCO расшифровывается как Plain Old CLR Object.Таким образом, ваши объекты POCO не имеют никаких «обычных свойств и методов».У них есть только те свойства и методы, которые вы им предоставляете, вот и весь смысл.

Теперь вы можете настроить шаблоны POCO T4 и сделать все ваши классы POCO производными от определенного базового класса или реализовать определенныйинтерфейс, если хотите.У меня часто есть шаблон, где все мои классы имеют свойство public Guid Id, и поэтому у меня есть базовый класс, который включает это свойство (и, возможно, некоторые даты аудита).Затем я модифицирую шаблоны, чтобы вывести мои классы POCO из этого базового класса и исключить свойство Id из создаваемого.Учитывая такой сценарий, я мог бы использовать базовый класс в качестве ограничения в ограничении where.

...