C# 如何在编辑但不查看实体时实现IDataErrorInfo以验证实体
首先将EntityFramework6与DB一起使用,但对它来说还是比较新的。我在模型上使用IDataErrorInfo进行验证,在编辑单个实体时效果很好。例如,编辑单个地址 但是,我注意到在加载多个实体(使用LINQ)时,性能受到了严重的影响。(例如,填充datagridview时,命令C# 如何在编辑但不查看实体时实现IDataErrorInfo以验证实体,c#,entity-framework,validation,C#,Entity Framework,Validation,首先将EntityFramework6与DB一起使用,但对它来说还是比较新的。我在模型上使用IDataErrorInfo进行验证,在编辑单个实体时效果很好。例如,编辑单个地址 但是,我注意到在加载多个实体(使用LINQ)时,性能受到了严重的影响。(例如,填充datagridview时,命令myContext.Address.ToList()占用了一秒钟来填充每一行)。这是因为对于从数据库检索到的每一行,相应的实体都会多次触发验证/错误检查代码。我意识到这是在DataGridView中绑定的结果,
myContext.Address.ToList()
占用了一秒钟来填充每一行)。这是因为对于从数据库检索到的每一行,相应的实体都会多次触发验证/错误检查代码。我意识到这是在DataGridView
中绑定的结果,而不是简单地从数据库中检索
我可以通过设置一个ValidationOn
标志来解决这个问题,该标志默认设置为false,它只会在所有验证检查中返回true。这要快得多,但在没有理由的情况下绕过这些验证检查似乎仍然效率低下
有没有办法禁用该界面,以便在需要时手动“激活”该界面
我假设从模型实体派生一个类并将其用于实现IDataErrorInfo会更好,但是如何定义可以从任何上下文对象派生的泛型类呢
我曾尝试创建以下内容:
public class ValidatingEntity : DbSet, IDataErrorInfo
private readonly DbSet _myEntity;
public ValidatingEntity(DbSet MyEntity)
{
_myEntity = MyEntity
}
}
这似乎可行,但我如何知道实体是什么来执行正确的验证测试。e、 g.我将如何做到这一点:
public string this[string columnName]
{
if (_myEntity is Address)
{
Address myAddress = (Address)_myEntity;
If (columnName=="AddressCode")
{
If (myAddress.AddressCode == string.empty) return "Code can not be blank";
}
}
}
如果(\u myEntity is Address)给出警告,则代码给定表达式决不是提供的(地址)类型
总之
- 如何基于上下文中的任何实体创建派生类
- 如何从我的任何一个实体实例化该类
- 有更好的方法吗李>
它还允许我构建自己的接口来替换
IDataErrorInfo
,因为这导致我的验证代码多次触发,我现在可以避免。经过测试,我很高兴更新1中确定的方法是解决方案(即基于此: