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

kubo [E-MAIL ADDRESS DELETED]
2008年 10月 20日 (月) 18:37:57 JST


久保(jflute)です。

> 中井さん
> propertyName = "Employeeid"
ご報告ありがとうございます。
ソースとつき合わせてなんとなくわかりました。

> 小谷さん(and 他コミッタの方々)
> そのお目当てのプロパティを再帰的に"ずっと"探し続けて
> しまっていることによると思います。
フォローありがとうございます。
ソースと現象から明らかにそんな感じですね。
確かJavaのS2Dxoでは2階層くらいまで限定だったような気もします。
C#でもやはり無限はまずいかもですね。

# あと、変換元のプロパティを探す際に、Getterだけの
# プロパティも対象にしてしまっているのはS2Dxoの
# 仕様的にどうなんでしょう!?!?
# Setできない内部的なプロパティも探しに行ってるような...

2008/10/20 Nakai <[E-MAIL ADDRESS DELETED]>:
> 久保さん
>
> お世話になっております。
>
> 例外が発生する場所ですが、以下の間違いでした。
> 申し訳ありません。
>
> 殆どのメンバーが、
> 「現在のスレッドがスタック オーバーフロー状態であるため、式を評価できません。」
> で内容があまり分からないのですが、
> 「source」変数の
> propertyName = "Employeeid"
> でした。
> (SQLServerのNorthwindDBのEmployeesテーブルのPKカラムです)
>
> もう少し詳細な情報が取れるよういろいろ試してみます。
>
>
> ------------------------------------------------
> destInfo = destType.GetProperty(targetPropertyName);
> if (destInfo != null && destInfo.CanRead && destInfo.CanWrite)
> {
>    _ConvertProperty(sourceInfo, source, dest, destInfo, existProperty);
> }
>    // 異なる場合、再帰で調査する
>
>
> ↓↓↓↓↓↓↓↓↓↓以下コメントアウトで正常動作↓↓↓↓↓↓↓↓↓
> /*
> else
> {
> ↓↓↓↓↓↓↓↓↓↓ここでException発生↓↓↓↓↓↓↓↓↓
>    object srcValue = sourceInfo.GetValue(source, null);
> ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
>    if (srcValue != null)
>    {
>        // 変換元を調査する
>        if (srcValue.GetType().Namespace != "System")
>        {
>            AssignTo(srcValue, dest);
>        }
>            // 変換先を調査する
>        else
>        {
>            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);
>            }
>        }
>    }
> }
> */
>
> kubo <[E-MAIL ADDRESS DELETED]> wrote:
>
>> 久保(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 メーリングリストの案内