Общий запрос с Entity Framework 4. Общий репозиторий? - PullRequest
1 голос
/ 01 марта 2011

Это моя структура базы данных: Компания Идентификатор компанииНазвание компании...

Местоположение LocationIDНазвание местоположения...

Контакт ContactIDКонтактное лицоПочта для связи

CompanyContact ContactIDИдентификатор компанииIsActive

LocationContact ContactIDLocationIDIsActive

Теперь у меня есть хранилище для каждого из этих объектов (CompanyContact, LocationContact)

public List<Contact> GetCompanyContact(int CompanyID)
{
   return _context.CompanyContacts.Where(p => p.CompanyID == CompanyID).Select(s => s.Contact).ToList();
}
...
public List<Contact> GetLocationContact(int LocationID)
{
   return _context.LocationContacts.Where(p => p.LocationID == LocationID).Select(s => s.Contact).ToList();
}
...

Как создать общий метод для получения списка контактов.Я хотел бы передать EntityName (CompanyContact или LocationContact) с именем столбца ссылок (CompanyID, LocationID).Пример того, что я хочу:

public List<Contact> GetContact(string EntityName,String ColName){....}
Ex of call .
GetContact("CompanyContact","CompanyID");

Большое спасибо. EDIT У компании может быть много контактов, и у местоположения тоже может быть много контактов.

1 Ответ

4 голосов
/ 01 марта 2011

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

public class MyRepository {
    var _context = new MyEFDatabaseEntities();

    public List<T> GetListOf<T>(Expression<Func<T, bool>> expression)
        where T : class {

        return _context.CreateObjectSet<T>().Where(expression).ToList();
    }
}

Эта маленькая строчка позволяет делать такие забавные вещи, как это:

// first make a repository object
var repository = new MyRepository();

// now I can grab a list of contacts based on CompanyID
var contacts = repository.GetListOf<Contact>(c => c.ContactID == 12345);

// or I can get a list of contacts based on location
var contacts = repository.GetListOf<Contact>(c => c.LocationID == 12345);

// get all contacts for a company
var contacts = repository.GetListOf<CompanyContact>(c => c.CompanyID == 123).Contacts;

// get all confabs for a location
var contacts = repository.GetListOf<LocationContact>(c => c.CompanyID == 123).Contacts;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...