使用EF 4,我有几个“商业”实体的子类型(客户,供应商,运输公司等)。他们需要是亚型。我正在构建一个通用的viewmodel,它调用一个从中访问通用存储库的服务。
由于我有4个子类型,所以最好使用一个'通用'视图模型。问题当然是我必须将特定类型调用到我的通用存储库中,例如:
BusinessToRetrieve = _repository
.LoadEntity<Customer>(o => o.CustomerID == customerID);
最好能够调用<SomethingElse>
,其中一个或另一个是子类型,否则我将不得不创建4个几乎相同的模型,这似乎是浪费!视图模型可以使用子类型实体名称,但我无法弄清楚如何将上述调用转换为类型。实现我想要的一个问题是,传入的lambda表达式无法在“泛型”调用中解析?
答案 0 :(得分: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);
答案 1 :(得分: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));
}
}