3

私はWCFサービス(サービス)を持っています。サービスはデータを管理します。しかし、LINQ クエリでデータを選択すると問題が発生します。「null 非許容値型である System.Int32 型のメンバーに null 値を割り当てることはできません。」というメッセージが表示されます。

メソッドを最初にウォークスルーするときにデバッグすることで、例外行まで終了します。デバッガーの行 (黄色でマークされた行) を "// 08" 行に戻してから、メソッドを実行すると、すべてうまくいきます。

    private static ResultClass Geselecteerd(int AID_Artiest)  // 01
    { // 02
        ResultClass _Result = new ResultClass(); // 03
        string sMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;// 04
        // 05
        try // 06
        { // 07
            var recArtiest = (from artiest in DatabaseControl.GetDatabeheer.DataContext.ARTIESTs  // 08
                           where artiest.ID_ARTIEST == AID_Artiest
                           select artiest).SingleOrDefault();

            if (recArtiest != null)
            {
                ArtiestDataType.ID_Artiest = recArtiest.ID_ARTIEST;
                ArtiestDataType.Artiestnaam = recArtiest.ARTIESTNAAM;
                ArtiestDataType.Voorvoegsel = recArtiest.VOORVOEGSEL;
                ArtiestDataType.Product = recArtiest.PRODUCT;
                ArtiestDataType.ID_Categorie = recArtiest.ID_CATEGORIE;
                ArtiestDataType.ID_Genre = recArtiest.ID_GENRE;
                ArtiestDataType.Is_Band = BasisDataType.GetBoolString(recArtiest.IS_BAND);
                ArtiestDataType.Land = recArtiest.LAND;
                ArtiestDataType.Plaats = recArtiest.PLAATS;
                ArtiestDataType.Website = recArtiest.WEBSITE;
                ArtiestDataType.DatumInvoer = recArtiest.DATUM_INVOER;
                ArtiestDataType.DatumMutatie = recArtiest.DATUM_MUTATIE;
            }
        }
        catch (Exception ex)
        {
            string sFoutmelding = "Kan geen selectie maken.";
            FLogboek.AddFoutmelding(FClassName, sMethodName, sFoutmelding, ex.Message);

            _Result.Code = ResultCode.FATAAL;
            _Result.Melding = sFoutmelding;
        }

        return _Result;
    }

ID_ARTIEST は整数フィールドであり、主キーでもあります。フィールドの値は必須であり、NULL 値は使用できません。

この方法は常に機能しています。新しいサービスを追加すると問題が発生します。

私の質問は次のとおりです。何が間違っていますか? サービスと関係ありますか?プロセスを遅らせる必要がありますか? 誰かヒントをくれませんか?私は8つのサービス参照を持っています。重要なソースが不足している場合は、追加できます。

現在、回避策しかありません。try-catch 領域内に try-catch を追加しました。そして、例外はありませんでした。それはパフォーマンスと関係があります。非同期ソリューションが必要ですか?

ありがとう。

4

6 に答える 6

5

ほぼ確実に起こっているのは、型のプロパティの 1 つがARTIESTsisDatabaseControl.GetDatabeheer.DataContext.ARTIESTsint?(null 許容整数を意味する) であるということです。

推測では、またはのいずれかだと思いID_CATEGORIEますID_GENRE

タイプの同等のプロパティを変更して、 typeArtiestDataTypeにもする必要がありますint?

これで問題が解決します。

于 2012-12-19T14:17:58.827 に答える
4

私は何を間違っていますか?

null 非許容要素 (構造体) に null を代入する以外は?

あなたのコードは無意味です (大量に投稿することは、関連する部分を実際に投稿することほど良くありません)。

データベースのフィールドが null 可能で、CONTAINS null である可能性がありますが、フィールドは int ではありませんか? (intのnullable)なので、そこにnullを割り当てることはできません。

データベースにマッピングされたテーブルが間違っている方向に目を向けます。フィールドを確認し、クラス内のすべての null 許容列が実際に null 許容であることを確認します。

于 2012-12-19T13:00:13.343 に答える
2

変化する

where artiest.ID_ARTIEST == AID_Artiest

where artiest.ID_ARTIEST.HasValue && artiest.ID_ARTIEST.Value == AID_Artiest

1 人以上のアーティストがID_ARTIESTセットを持っていない (これを修正する必要があります。常に存在するはずの主キーのように見えます)。そのため、比較する(int?)null == intと例外がスローされます。

于 2012-12-19T13:01:35.340 に答える
0

変数/プロパティを nullable int として宣言します

public int? myInt
于 2012-12-19T13:26:56.847 に答える