【问题标题】:Check items are not inserted in Entity Framework 4.1实体框架 4.1 中未插入检查项
【发布时间】:2011-06-10 15:25:32
【问题描述】:

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

问题是主键只是自动生成的,表的唯一性来自 EF 不支持的唯一列。如何检查我是否尚未在 EF 4.1 中插入会话的项目部分?我在 DbContext 上看到了 find 方法,但这需要我不能使用的主键。鉴于我使用 4.1,我也被 DBContext 困住了。我怎样才能有一个通用的方法来检查这个?

【问题讨论】:

    标签: entity-framework-4.1


    【解决方案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,其他进程可能已经插入了实体。没有简单的方法来处理它。

    【讨论】:

      猜你喜欢
      • 2011-08-12
      • 2011-11-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多