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

Nakai [E-MAIL ADDRESS DELETED]
2008年 10月 20日 (月) 18:44:50 JST


小谷さん

お世話になります。中井です。

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

何故か全項目移し替えが行われてます。不思議です・・・。

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

お忙しいところ申し訳ありません。
よろしくお願い致します。



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 メーリングリストの案内