Можете ли вы передать таблицу / коллекцию enity-Framework как параметр в функцию - PullRequest
0 голосов
/ 07 декабря 2010

Возможно ли это?

 using (Entities db = new Entities())
 {
   LoadDropDownList(ddlFirst, db.MyTable , (bool)(myMember.Id == 0), (int)myMember.RevenueRangeID);
   LoadDropDownList(ddlSecond, db.OtherTable , (bool)(myMember.Id == 0), (int)myMember.OtherID);

 }

Я спотыкаюсь о том, каким должен быть тип второго параметра - я, по сути, пытаюсь передать «таблицу» Entity-Framework в общую процедуру, которая загружает DropDownList с данными из таблицы «MyTable», используя собственную логику /filtering.

Поскольку я делаю одно и то же примерно 6 раз для 6 различных выпадающих списков / таблиц, я хотел использовать универсальную функцию для достижения этой цели.

Ответы [ 2 ]

2 голосов
/ 07 декабря 2010

Вот что я бы сделал:

using(Entities db = new Entities())
{
   LoadDropDownList(ddlReferralType, db.TheTable.ToList(), (bool)(myMember.Id ==0), (int)myMember.RevenueRangeID); 
}

Это вынуждает таблицу перечисляться и преобразовываться в List<TMyTableEntity>.Проблема с передачей таблицы напрямую заключается в том, что Entity Framework использует отложенное выполнение, то есть к таблице нельзя обращаться только до после ObjectContext (Entities db) уже удален.Type db.TheTable зависит от того, как настроена генерация кода EF.Но, вероятно, это либо ObjectSet<T>, либо ObjectQuery<T>.

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

Базовым типом ваших таблиц является ObjectSet (или DbSet, если вы используете CodeFirst):

public void LoadDropDownList<T>(DropDownList dropDown, ObjectSet<T> table, 
    bool isNew, int otherId)
{
    // Do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...