0

私の質問はこれと同じです

しかし、私は本当にそこに解決策を見ません。国と州という 2 つの POCO を持つ単純なモデルがあるとします。

public class Country
{
    public string Code { get; set; }
    public string Name { get; set; }
}
public class State 
{
    public string Code { get; set; }
    public string Name { get; set; }

    public virtual Country Country { get; set; }
}

リポジトリを .GetStateByCode(myCode) に使用すると、動的プロキシ オブジェクトが取得されます。WCF サービスを使用してクライアントに送信したいと考えています。動的プロキシは既知のタイプではないため、失敗します。

ここに私の代替案があります。コンテキストで ProxyCreationEnabled を false に設定すると、.GetStateByCode(myCode) によって POCO が得られます。これは素晴らしいことです。ただし、POCO to Country のナビゲーション プロパティは NULL (あまり良くありません) です。

状態の POCO を新しく作成し、リポジトリから返された動的プロキシから手動で入力して返す必要がありますか? AutoMapper を使用して動的プロキシ オブジェクトを POCO にマップする必要がありますか? ここで完全に欠けているものはありますか?

4

1 に答える 1

1

ラディスラフ・ムルンカの答えは明らかだと思います。警告は引き続き適用されます。以下のこのアイデアでも。ピックアップされるものに注意してください。オブジェクト a からオブジェクト B にデータを簡単に取得する方法を進めたい場合、彼は を含めませんでした。それは実際に手元にある問題です。

サンプル溶液

nuget パッケージValueInjecterを参照してください (これを実行できる唯一のツールではありませんが、非常に使いやすい)、特に同じプロパティと型を持つオブジェクトを別のオブジェクトに簡単にコピーできます。(遅延読み込み/ナビゲーションの影響を覚えておいてください)。

したがって、バニラオプションは次のとおりです。

 var PocoObject = new Poco();
 PocoObject.InjectFrom(DynamicProxy); // copy contents of DynamicProxy to PocoObject

ただし、デフォルトの動作を確認し、カスタム ルールを検討してください

     var PocoObject = new Poco();
     PocoObject.InjectFrom<CopyRule>(DynamicProxy);

 public class CopyRule : ConventionInjection
    {
        protected override bool Match(ConventionInfo c)
        {
            bool usePropertry;   // return if the property it be included in inject process
            usePropertry = c.SourceProp.Name == "Id";  // just an example
            //or
            // usePropertry = c.SourceProp.Type... == "???"
            return usePropertry;
        }
    }
于 2013-02-05T14:38:15.890 に答える