0

使用 EF 4,我有几个“业务”实体的子类型(客户、供应商、运输公司等)。他们确实需要是子类型。我正在构建一个通用视图模型,它调用一个访问通用存储库的服务。

由于我有 4 个子类型,因此最好为所有这些子类型使用“通用”视图模型。问题当然是我必须将特定类型调用到我的通用存储库中,例如:

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

能够调用<SomethingElse>,somethingElse 是其中一个或其他子类型会很好),否则我将不得不创建 4 个几乎相同的视图模型,这当然看起来很浪费!子类型实体名称可用于视图模型,但我一直无法弄清楚如何使上述调用将其转换为类型。实现我想要的一个问题是,传入的 lambda 表达式可能无法在“通用”调用上解决?

4

2 回答 2

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));
    }
}
于 2010-01-18T20:31:59.170 回答
2

听起来您需要让自己熟悉泛型。首先,您将能够编写如下代码:

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);
于 2010-01-18T17:39:22.137 回答