检查项未插入Entity Framework 4.1中

问题描述

| 我正在使用Entity Framework,而我的部分代码想将100个实体放入数据库中。我要插入的某些实体具有多对多关系,因此我想确保只插入新项目。可以很容易地检查数据库中的现有项目,但是如果我已经在当前会话中插入了该项目以保留100个项目,那么我将得到重复的项目。 事情是主键只是自动生成的,并且表的唯一性来自于EF不支持的唯一列。如何检查是否尚未在EF 4.1中插入会话的项目部分?我在DbContext上看到了find方法,但这需要我不能使用的主键。鉴于我使用的是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);
最后一条语句实际上并不是并发系统中的最佳方法,因为当您调用它时,该实体不必存在,但是一旦调用“ 3”,其他进程可能已经插入了该实体。没有简单的方法来处理它。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...