0

EF 4を使用して、「ビジネス」エンティティのいくつかのサブタイプ(顧客、サプライヤー、運送会社など)があります。それらはサブタイプである必要があります。汎用リポジトリにアクセスするサービスを呼び出す一般的なビューモデルを構築しています。

私には4つのサブタイプがあるので、これらすべてに「汎用」ビューモデルを使用するとよいでしょう。もちろん問題は、特定のタイプを汎用リポジトリに呼び出さなければならないことです。たとえば、次のようになります。

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

呼び出すことができるとよいでしょう<SomethingElse>。somethingElseはサブタイプのいずれかです)、そうでない場合は、ほぼ同一のviemodelを4つ作成する必要がありますが、これはもちろん無駄に思えます。サブタイプエンティティ名はビューモデルで使用できますが、上記の呼び出しでこれをタイプに変換する方法を理解できませんでした。私が望むことを達成する上での問題は、おそらく渡されるラムダ式が「ジェネリック」呼び出しで解決できないということです。

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

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