根据实体框架检查数据库中的数据

Posted

技术标签:

【中文标题】根据实体框架检查数据库中的数据【英文标题】:Check data from Database against Entity Framework 【发布时间】:2021-12-26 16:57:31 【问题描述】:

我的问题是我的数据库可能包含来自软件先前版本的无效值。对于这些值,我们必须单独决定如何处理它们。

我已经创建了一个相应的实体框架,可以用来访问数据库。在测试系统内部,一切正常,但在客户系统上的第一次测试安装期间,由于数据库中的值无效,程序总是崩溃。

现在的问题是我可以使用实体框架检测数据库中的错误吗?

我想知道哪些记录、哪些列会导致错误。

我不能假设任何键都可以单独获取每个实体。所以我的第一个想法是从DbContext 中为每个实体(QueryingEnumerable)检查每个存储库(DbSet)。但是,DbSet 无法真正访问单个实体,只能通过查询直到出现第一个错误。

另外,我仍然不知道哪些列导致了错误,因为异常不包含任何信息。

还有什么我可以尝试的建议吗?

【问题讨论】:

请附上显示的错误信息,谢谢 【参考方案1】:

如果您有 dbSet 持有的给定实体的 ID 或键,那么您可以获得单个实体。

// In repository or somewhere else, where you have access to this particular DbSet
DbSetOfSomeEntity.FirstOrDefault(x => x.Id == /* Some id number, guid etc */)

try-catch 块中访问它们,读取异常并决定下一步做什么。

【讨论】:

不幸的是,我也没有关于实体数据的任何信息。通过主键单独查询所有实体是不可能的。 然后尝试DbSetOfSomeEntity.OrderBy(p=>p.Id).Skip(0).Take(1) 并遍历跳过数量 - 这将为您提供一个固定顺序的实体 - 假设,由于您使用 EF,那么您有具有已知字段的实体类,因为你想使用 dbSet。

以上是关于根据实体框架检查数据库中的数据的主要内容,如果未能解决你的问题,请参考以下文章

实体框架作为数据库代码的类型检查/验证系统 [关闭]

实体框架代码首先进行连接状态检查

实体框架检查属性是否为导航属性

iOS:检查值是不是与核心数据中实体的任何属性匹配?

使用 LINQ 和实体框架检查 c# var 中的空值

需要使用实体框架将大量记录插入数据库