实体框架跳过标识列并发检查

时间:2014-09-17 18:36:43

标签: c# .net entity-framework entity-framework-5

我正在使用Entity Framework 5代码优先,我有一种情况,我有一个实体,其Identity标记列不是主键的一部分。当我添加新记录并在上下文中调用SaveChanges时,我得到ConcurrencyException。如果我将实体地图上的主键更改为SCHED_ID或从实体地图中删除SCHED_ID,则SaveChanges完成无误。我怀疑,因为SCHED_ID被定义为int,它默认值为零,并且当数据库实际为其赋值(因此导致ConcurrencyException)时,Entity Framework认为它已经更改。我的假设是否正确?如何在不将实体地图上的密钥更改为SCHED_ID的情况下解决此问题?

实体定义如下:

public partial class Sched
{
    public int SCHED_ID { get; set; }
    public System.DateTime DATE_QUEUED { get; set; }
    public string STATUS_CODE { get; set; }
}

public class SchedMap : EntityTypeConfiguration<Sched>
{
    public SchedMap()
    {
        // Primary Key
        this.HasKey(t => new { t.STATUS_CODE, t.DATE_QUEUED });

        //Properties
        this.Property(t => t.SCHED_ID)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
            .IsConcurrencyToken(false);

        // Table & Column Mappings
        this.ToTable("Sched");
        this.Property(t => t.SCHED_ID).HasColumnName("SCHED_ID");
        this.Property(t => t.STATUS_CODE).HasColumnName("STATUS_CODE");
        this.Property(t => t.DATE_QUEUED).HasColumnName("DATE_QUEUED");
    }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new SchedMap());
}

0 个答案:

没有答案