Entity Framework, общий список - PullRequest
       5

Entity Framework, общий список

1 голос
/ 22 февраля 2012

У меня вопрос по универсальному списку.

Предположим, у меня есть база данных, которая содержит три таблицы: таблицу пользователей, таблицу заказов и таблицу товаров.

В коде C # я хочу, чтобы функция, называемая GetList, получала все записи из одной из трех таблиц.

Если я не использую универсальный метод, мне нужно создать 3 различных метода, которые выглядят как GetAllUsers (), GetAllOrders () и GetAllItems (). Внутри этих 3 методов мне нужно написать linq для запроса к базе данных.

У меня вопрос, как мне реализовать универсальный метод.

Я хочу использовать EF 4.1. Я знаю, как это сделать, используя NHibrate tho.

UPDATE

А как насчет этого? Я нашел это из другого поста, он может быть использован для получения одной записи

        public T GetSingleEntity<T>(Expression<Func<T,bool>> expression) where T:class
    {
        using (PersonalLinksEntities dbContext = new PersonalLinksEntities()) 
        {
            return dbContext.CreateObjectSet<T>().SingleOrDefault(expression);
        }

    }

PersonalLinksEntities генерируется EF, это первая модель базы данных.

Вот как я называю этот метод

    public ActionResult Index()
    {
        var thisOne = base.GetSingleEntity<PersonalRecord>(r=>r.RecordID==1);            
        return View();
    }

Ответы [ 3 ]

1 голос
/ 22 февраля 2012

Конкретная реализация будет зависеть от того, что вы используете для доступа к вашим данным. NHib, EF, L2S? Все они имеют некоторый способ общего доступа к IQueryable.

Вы можете использовать такой метод, как:

public IQueryable<T> GetQueryable<T>()
{
   //Implementation depends on your data provider
   //return dataContext.GetTable<T>();
   //return session.Query<T>();
}

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

public abstract class RepositoryBase<T>
{
   public IQueryable<T> GetQuery()
   {
     //Implementation determined by provider
    }

}
0 голосов
/ 22 февраля 2012

Уже существует метод, который вы хотите в DbContext с именем Set, например var results = dbContext.Set ();

Если вы используете ObjectContext, то вам нужен метод CreateObjectSet ().

0 голосов
/ 22 февраля 2012

Поскольку в вопросе нет подробностей относительно того, что вы уже написали.Если вы просто хотите получить все записи из таблиц ... Почему LINQ ... ??Вы можете просто запросить базу данных, используя набор данных и адаптер данных в методе, и чтобы сделать это универсальным, вы просто передаете имя таблицы и получаете набор данных, после чего вы можете играть с этим набором данных, как вам нравится.Пожалуйста, опишите подробнее, если есть какая-то конкретная сложность в этом случае, которую я упускаю.

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