0

私は以下に書いたクラスにメソッドを持っています:-

 public void Insert<EntityColumn>(int foreignKeyId, EntityColumn column,
        TList<xyz> entity, TransactionManager transactionManager)
{
    entity.ForEach (
                 pca =>
                 {
                     pca.GetType().GetProperty(column.ToString()).SetValue(pca, foreignKeyId, null);
                     pca.EntityState = EntityState.Added;
                     _provider.payment.Insert(transactionManager, pca);
                 }
            );
}

今、私はテストクラスからこのメソッドを呼び出したいと思っています. EntityColumn 列の代わりに、オブジェクトの列名を送信したいと考えています。ここのオブジェクトは、私のテーブルの表現です。テーブル名は ClientData です。列が「InvoiceNo」であるとします。では、これをどのように設定してこのメ​​ソッドに渡すことができますか。手伝ってください

4

1 に答える 1

0

現時点では開発者ツールにアクセスできないため、最初にこれをテストすることはできません。しかし、これに変更すると、例に書かれているように機能すると思います。

public void Insert<TableType>(int foreignKeyId, string columnName,
    TList<TableType> entity, TransactionManager transactionManager) {

    entity.ForEach(pca => {
        pca.GetType().GetProperty(columnName).SetValue(pca, foreignKeyId, null);
        pca.EntityState = EntityState.Added;
        _provider.payment.Insert(transactionManager, pca);
    });
}

これで問題が解決するかどうかはわかりませんが、列変数を文字列としてのみ使用して、TableType で表される型から呼び出したいプロパティの名前を表していることに気付くでしょう。列の種類を知る必要がある場所を見たことはありませんが、全体像が見えていない可能性があります。

エンティティ TList のタイプを伝えたので、リフレクションをまったく使用する必要はありませんが、あなたがやろうとしていることをまだ理解していないことは認めます。

于 2012-10-12T03:24:31.017 に答える