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