0

使用EF 4,我有一個「商業」實體的若干亞型(客戶,供應商,運輸公司等)。他們需要成爲亞型。我正在構建一個通用視圖模型,它調用一個通用存儲庫訪問的服務。「通用」視圖模型

因爲我有4個亞型,這將是很好的用於所有這些的「通用」視圖模型。問題當然是,我有打電話給一個特定的類型轉換成我的通用信息庫,例如:

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

這將是很好的能夠調用<SomethingElse>,somethingElse作爲亞型的一個或其他),否則我將不得不創建4個幾乎相同的模型,這當然是浪費!子類型實體名稱可用於viewmodel,但我一直無法弄清楚如何使上述調用將其轉換爲類型。實現我想要的一個問題是,大概傳入的lambda表達式無法在「泛型」調用中解析?

回答

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)); 
    } 
}