1

繰り返しますが、VisualStudioLightSwitchに問題があります。次に、カスタム検証について説明します。別のエンティティを参照する外部キーを持つエンティティがあります。 ここに画像の説明を入力してください

RouteItemには、FacilityItemへの外部キーが含まれています。これは次のようになります。

ここに画像の説明を入力してください

私が今やりたいのは、RouteItemのROUTENAMEを検証することです。選択したファシリティにルート名がまだ存在していないことを確認する必要があります。

私の検証コードは次のようになります。

    IEnumerable<RouteItem> items = this.DataWorkspace.dsMESOracle.dtRoutes.GetQuery().Execute();

        if (this.Details.EntityState == EntityState.Added)
        {
            items = items.Where(e => e.ROUTENAME == ROUTENAME && e.MES_FACILITY == MES_FACILITY);
            if (items.Count() > 0)
            {
                results.AddPropertyError(ValidationMsgRes.ROUTES_ROUTENAME_ALREADY_EXISTS);

            }
        }
        else if (this.Details.EntityState == EntityState.Modified)
        {
            //Ignore the current entity if its modified otherwise it will always get count > 0
            items = items.Where(e => e.ROUTENAME == ROUTENAME && e.MES_FACILITY == MES_FACILITY && e != this);
            if (items.Count() > 0)
            {
                results.AddPropertyError(ValidationMsgRes.ROUTES_ROUTENAME_ALREADY_EXISTS);

            }
        }

これまでのところ、検証ロジックは完璧に機能します-本来あるべきことを実行します。主な問題は、this.MES_FACILITYライトスイッチが変更を保存/更新しようとすると、リードにアクセスすると次のエラーが発生することです。

ここに画像の説明を入力してください

acilityItem temp = this.MES_FACILITY;検証実装にのみ書き込む場合にもエラーが発生します。

this.MES_FACILITY検証の実装ですべての参照/アクセスを削除すると、すべてが完全に機能します。

また、検証が真であるか偽であるかは関係ありません。問題は常に発生します!PS:この問題は、他のエンティティや外部キーでも発生しますが、RouteItemとFacilityItemの組み合わせの問題ではありません。

4

1 に答える 1

0

このエラー/問題の解決策を見つけました:

http://msdn.microsoft.com/en-us/library/bb738618.aspx http://knowledgebase.progress.com/articles/Article/000028868

回避策1.ソリューション全体をクリーンアップします2.ソリューション/プロジェクトフォルダー全体(VisualStudioではないExplorerで、またはNotepad ++を使用して)でConcurrencyMode = "Fixed"を検索し、削除します3.ソリューションを再構築します4.満足してください!

それは私のために働いた:)

于 2012-07-19T08:35:01.970 に答える