[seasar-dotnet:1016] Re: DBFlute &S2Dxoによるデータ詰め替えについて

koyak [E-MAIL ADDRESS DELETED]
2008年 10月 20日 (月) 18:22:30 JST


中井さん

小谷です。
S2Dxoには詳しくないコミッタですが、
コメントさせていただきます。

>S2Dxoのソースを見て、下記部分をコメントアウトすると、
>データの移し替えも正しく行われたのですが、何か他に影響が出ますでしょうか?

ソースを読んでみた限りでは
再帰的にプロパティを探しに行かなくなるので
変換先にお目当ての名称をもつプロパティがなければ
移し替えが行われない、という可能性がありそうです。


StackOverflowExceptionが起きている原因は
そのお目当てのプロパティを再帰的に"ずっと"探し続けて
しまっていることによると思います。
(見当違いでしたらツッコミをお願いします>識者の方々)

恥ずかしながらすぐには良い修正方法が思いつかないので
もう少々お時間を下さい。

2008/10/20 17:53 kubo <[E-MAIL ADDRESS DELETED]>:
> 久保(jflute)です。
>
> 中井さん、こんばんは
>
> 早速確認させて下さい。
> コメントアウトされた部分で、実際例外が発生する直前
> の処理における「destType」と「srcValue」は何になるか
> 教えて頂けますでしょうか?
>
>
> #
> # S2Dxo詳しいコミッタの方気づいた時に「Help」お願いします
> #
>
> 2008/10/20 中井 雅文 <[E-MAIL ADDRESS DELETED]>:
>> お世話になります。中井と申します。
>>
>> 現在、Quill、DBFlute、S2Dxoでアプリケーションを作成しております。
>>
>> DBFluteで自動生成したEntityをカスタムDtoに移送しようとS2Dxoを使ったのですが、
>> 以下のExceptionが発生してしまいました。
>> (移送元が試しに作ったカスタムEntityであれば問題ありません)
>>
>> 【発生場所】
>> Seasar.Dxo.Interceptor.DxoInterceptor._TryExchangeSameNameProperty
>>
>> 【例外内容】
>> 'System.StackOverflowException' のハンドルされていない例外が mscorlib.dll で発生しました。
>>
>>
>> S2Dxoのソースを見て、下記部分をコメントアウトすると、データの移し替えも正しく行われたのですが、何か他に影響が出ますでしょうか?
>>
>> お忙しいところ申し訳ありませんが、よろしくお願い致します。
>>
>>
>> -----------------------------------------------------
>>
>> destInfo = destType.GetProperty(targetPropertyName);
>> if (destInfo != null && destInfo.CanRead && destInfo.CanWrite)
>> {
>>    _ConvertProperty(sourceInfo, source, dest, destInfo, existProperty);
>> }
>>    // 異なる場合、再帰で調査する
>>
>>
>> ↓↓↓↓↓↓↓↓↓↓以下コメントアウトで正常動作↓↓↓↓↓↓↓↓↓
>> /*
>> else
>> {
>>    object srcValue = sourceInfo.GetValue(source, null);
>>    if (srcValue != null)
>>    {
>>        // 変換元を調査する
>>        if (srcValue.GetType().Namespace != "System")
>>        {
>>            AssignTo(srcValue, dest);
>>        }
>>            // 変換先を調査する
>>        else
>>        {
>>                        ↓↓↓↓↓↓↓↓↓↓ここでException発生↓↓↓↓↓↓↓↓↓
>>            PropertyInfo[] properties = destType.GetProperties();
>>                        ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
>>            foreach (PropertyInfo property in properties)
>>            {
>>                object destValue = property.GetValue(dest, null);
>>                if (destValue != null && destValue.GetType().BaseType != typeof (ValueType) &&
>>                    destValue.GetType().Namespace != "System")
>>                    AssignTo(source, destValue);
>>            }
>>        }
>>    }
>> }
>> */
>>
>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内