0

Используя EF 4, у меня есть несколько подтипов организации «Бизнес» (клиенты, поставщики, компании-перевозчики и т. Д.). Они должны быть подтипами. Я создаю общую viewmodel, которая вызывает службу, с которой обращается общий репозиторий.«Общий» ViewModel

Поскольку у меня есть 4 подтипа, было бы неплохо иметь «общую» модель просмотра, используемую для всех этих. Проблема заключается в том, конечно, что я должен назвать конкретный тип в мой общий репозиторий, например:

BusinessToRetrieve = _repository 
    .LoadEntity<Customer>(o => o.CustomerID == customerID); 

Было бы хорошо, чтобы быть в состоянии назвать <SomethingElse>, somethingElse быть один или другой из подтипов), в противном случае Мне нужно будет создать 4 около одинаковых видемодели, что, кажется, пустая трата! Суть сущности подтипа доступна для viewmodel, но мне не удалось выяснить, как сделать вышеупомянутый вызов преобразовать это в тип. Проблема с достижением того, что я хочу, заключается в том, что предположительно, что переданное лямбда-выражение не сможет разрешить «общий» вызов?

ответ

2

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

class ViewModel<T> where T : Business { 
    public void DoSomething(Func<T, bool> predicate) { 
     BusinessToRetreive = _repository.LoadEntity<T>(predicate); 
    } 
} 

Тогда вы можете сказать:

ViewModel<Customer> c = new ViewModel<Customer>(); 
c.DoSomething(o => o.CustomerID == customerID); 
2

Я не уверен, если это то, что вы хотите, но вы можете быть заинтересованные в организации MicroModels

public class EditCustomerModel : MicroModel 
{ 
    public EditCustomerModel(Customer customer, 
          CustomerRepository customerRepository) 
    { 
     Property(() => customer.FirstName); 
     Property(() => customer.LastName).Named("Surname"); 
     Property("FullName",() => string.Format("{0} {1}", 
              customer.FirstName, 
              customer.LastName)); 
     Command("Save",() => customerRepository.Save(customer)); 
    } 
}