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

Nakai [E-MAIL ADDRESS DELETED]
2008年 10月 20日 (月) 19:10:13 JST


中川さん

お世話になります。
同事象参考になります。
ありがとうございます。

中井


中川弘一08 <[E-MAIL ADDRESS DELETED]> wrote:

> 中井さん
> 
> はじめまして、中川と申します。
> 
> 私も過去に同じ現象に遭遇しました。
> 
> DBFluteで生成したEntityと自作のPONO間でデータを写す際に同じ現象が発生し
> ました。
> S2Dxoが無限に階層を掘り下げてプロパティ情報を取得しに行くので、循環参照
> するようなプロパティがある場合に、オーバーフローが発生しているようでした。
> たしかDBMetaプロパティあたりだったと記憶しています。
> 
> 今取り組んでいる案件では、2階層以上はプロパティを検索しないように改造し
> て使用しています。
> 
> 根本的な解決策でなくて申し訳ありませんが、情報共有まで。
> 
> 
> Nakai さんは書きました:
> > 小谷さん
> > 
> > お世話になります。中井です。
> > 
> >>> ソースを読んでみた限りでは
> >>> 再帰的にプロパティを探しに行かなくなるので
> >>> 変換先にお目当ての名称をもつプロパティがなければ
> >>> 移し替えが行われない、という可能性がありそうです。
> > 
> > 何故か全項目移し替えが行われてます。不思議です・・・。
> > 
> >>> 恥ずかしながらすぐには良い修正方法が思いつかないので
> >>> もう少々お時間を下さい。
> > 
> > お忙しいところ申し訳ありません。
> > よろしくお願い致します。
> > 
> > 
> > 
> > koyak <[E-MAIL ADDRESS DELETED]> wrote:
> > 
> >> 中井さん
> >>
> >> 小谷です。
> >> 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 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet



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