2011-06-09 69 views
0

我正在使用实体框架和我的代码的一部分想要说100个实体的数据库。我插入的一些实体有多对多的关系,我想确保我只插入新项目。很容易检查数据库中的现有数据,但如果我已经将其插入到当前会话中以保存100个项目,我将获得重复的项目。检查项目没有插入实体框架4.1

东西是主键只是自动生成的,表唯一性来自EF中不支持的唯一列。如何检查我是否已经在EF 4.1中插入会话的项目部分?我在DbContext上看到了find方法,但是这需要使用主键。鉴于我使用4.1,我也坚持使用DBContext。你可以用通用的方法来检查吗?

回答

1

如果你想使用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,其他进程可能已经插入实体。有没有简单的方法来处理它。