我再次遇到了视觉工作室灯开关的问题。现在是关于自定义验证。我有一个实体,它有一个外键引用另一个实体:
RouteItem 包含 FacilityItem 的外键,如下所示:
我现在要做的是验证 RouteItem 中的 ROUTENAME。我必须确保所选设施中不存在 routname。
我的验证代码如下所示:
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
如果 lightswitch 尝试保存/更新更改,则访问导致以下错误:
acilityItem temp = this.MES_FACILITY;
如果我只写验证实现,也会发生错误。
如果我删除所有引用/访问this.MES_FACILITY
验证实现中的所有内容,一切都会完美。
验证是真还是假也无关紧要。问题总是出现!PS:其他实体和外键也会出现问题,这不是 RouteItem - FacilityItem 组合的问题