Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架跳过标识列并发检查_C#_.net_Entity Framework_Entity Framework 5 - Fatal编程技术网

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

C# 实体框架跳过标识列并发检查,c#,.net,entity-framework,entity-framework-5,C#,.net,Entity Framework,Entity Framework 5,我首先使用的是EntityFramework5代码,我遇到的情况是,有一个实体的标识列不是主键的一部分。当我添加一条新记录并在上下文中调用SaveChanges时,我会得到一个ConcurrencyException。如果我将实体映射上的主键更改为SCHED_ID,或者从实体映射中删除SCHED_ID,则SaveChanges将完成而不会出现问题。我怀疑,由于SCHED_ID被定义为int,因此它默认为零值,并且当数据库实际为其赋值时,Entity Framework认为它已更改,从而导致并发异

我首先使用的是EntityFramework5代码,我遇到的情况是,有一个实体的标识列不是主键的一部分。当我添加一条新记录并在上下文中调用SaveChanges时,我会得到一个ConcurrencyException。如果我将实体映射上的主键更改为SCHED_ID,或者从实体映射中删除SCHED_ID,则SaveChanges将完成而不会出现问题。我怀疑,由于SCHED_ID被定义为int,因此它默认为零值,并且当数据库实际为其赋值时,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());
}

我认为这是由生成的insert语句造成的,该语句按PK过滤,而不是按scope_标识过滤,因为事务尚未提交,所以找不到scope_标识。你不能将SCHED_ID设置为PK吗?@YuliamChandra我当然可以,但这意味着我的地图不再与数据库匹配。如果这是解决问题的正确方法,那么这就是我将要做的。如果使用EF6,您可以拦截查询并替换命令文本,这可能会起作用。。。