我正在使用实体框架,而我的代码的一部分想将100个实体放在数据库中。我正在插入的一些实体有很多关系到许多关系,我想确保我只插入新项目。很容易检查数据库中的现有元素,但是如果我已经在当前的会话中插入它以持续100个项目,我将获得重复的项目。

事实是,主键只是自动生成的,表唯一性来自EF中不支持的唯一列。如何检查是否尚未在EF 4.1中插入会话的部分?我在dbcontext上看到了查找方法,但是需要我无法使用的Primay键。鉴于我使用4.1,我也被dbcontext所困。我如何有一种通用方法来检查此问题?

有帮助吗?

解决方案

如果要使用EF,则应将PK坚持为您实体的唯一标识。否则,您的发展经验将非常糟糕。

如果您想检查当前上下文中是否已经处理过相同的项目:

bool exists = context.YourDbSet.Local.Any(x => x.UniqueId == someId)

如果您需要检查实体使用状态:

EntityState state = context.Entry(entity).State;

如果您需要检查数据库中的实体是否存在:

YourEntity entity = context.YourDbSet.SingleOrDefault(x => x.UniqueId == someId);

最后一个语句实际上不是并发系统中的最佳方法,因为当您称其为实体时,不必存在 SaveChanges 其他过程已经可以插入实体。没有简单的方法来处理它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top