0

DataReader から POCO にデータを移動したり、POCO から値を取得したりするために使用されるいくつかのデリゲート メソッドを持つオブジェクト DataParameterInfo (DPI) があります。

例:

new DataParameterInfo<IBulletinPCN>
{
    FieldName = "ChangeProcedure",
    ParameterName = "@ChangeProcedure",
    EntityName = "ChangeProcedure",
    DataType = SqlDbType.NVarChar,
    FieldType = FieldType.Other,
    PopulateEntity = (dr, e) => e.ChangeProcedure = dr.IsDBNull(dr.GetOrdinal("ChangeProcedure")) ? null : dr.GetString(dr.GetOrdinal("ChangeProcedure")),
    ReadEntity = e => e.ChangeProcedure
}

次のように、PopulateEntity デリゲート内で DPI の Fieldname プロパティを参照したいと思います。

    PopulateEntity = (dr, e) => e.ChangeProcedure = dr.IsDBNull(dr.GetOrdinal(FieldName)) ? null : dr.GetString(dr.GetOrdinal(FieldName)),

または多分

    PopulateEntity = (dr, e) => e.ChangeProcedure = dr.IsDBNull(dr.GetOrdinal(this.FieldName)) ? null : dr.GetString(dr.GetOrdinal(this.FieldName)),

DPI自体ではなく、DPIが作成されているクラスを参照しようとすると、「これ」のみが参照されます。

上記のように私がしようとしていることはできますか?

4

3 に答える 3

1

そのクラスのオブジェクト初期化子内でクラスの別のメンバーを参照することはできません。これにより、循環参照が発生します。

イニシャライザのPopulateEntityにプロパティを割り当てるだけで、これを回避できます。

于 2012-05-04T13:27:40.277 に答える
1

デリゲートの呼び出し元を変更することで、フィールド名をパラメーターとしてデリゲートに渡すことができます。

元:

PopulateEntity = (dr, e, fieldname) => e.ChangeProcedure = dr.IsDBNull(dr.GetOrdinal(fieldname)) ? null : dr.GetString(dr.GetOrdinal(fieldname))

そして、そのデリゲートを実行するポイントで、次のように言います。

PopulateEntity(dr, e, this.fieldname);
于 2012-05-04T13:44:10.047 に答える
0

この シナリオでは、以前に設定されたプロパティ値を問題なく参照できる昔ながらの方法で行う必要がありますvar x = new Foo { property = bar }var x = new Foo(); x.property=bar;

于 2012-05-04T13:32:33.817 に答える