繰り返しますが、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の組み合わせの問題ではありません。