【发布时间】:2020-11-23 22:31:41
【问题描述】:
我在 .NET Core 3.1 中有一个使用 Entity Framework 3.1.6 的 MVC 网站。我的问题是我的一个实体现在抛出错误:
System.ArgumentException:已添加具有相同键的项目。关键:评估员
直到最近它都运行良好,但我不确定发生了什么变化。
型号
public class FacilityQCResult
{
[Key]
public int ID { get; set; }
public Guid? QCID { get; set; }
public string QCSeverity { get; set; }
public string QCType { get; set; }
public string QCShortName { get; set; }
public string Resolution { get; set; }
public string Base { get; set; }
public string FacilityNumber { get; set; }
public string FacilityName { get; set; }
public DateTime? DataEntryComplete { get; set; }
public string TeamAssignment { get; set; }
public string Assessor { get; set; }
public string TripWeek { get; set; }
public string Details { get; set; }
public Guid? FacilityID { get; set; }
}
上下文
public partial class SQLDBContext : DbContext
{
public SQLDBContext()
{
}
public SQLDBContext(DbContextOptions<SQLDBContext> options)
: base(options)
{
}
public virtual DbSet<FacilityQCResult> FacilityQCResults { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<FacilityQCResult>(entity =>
{
entity.ToTable("FacilityQCResult");
entity.HasKey(e => e.ID);
entity.Property(e => e.DataEntryComplete)
.HasColumnName("Data_Entry_Complete")
.HasColumnType("datetime");
entity.Property(e => e.TeamAssignment)
.HasColumnName("Team_Assignment")
.HasMaxLength(100)
.IsUnicode(false);
entity.Property(e => e.TripWeek)
.HasColumnName("Trip_Week")
.HasMaxLength(10)
.IsUnicode(false);
});
}
}
表结构
当它到达以下行时会引发错误:
var result = await context.FacilityQCResults.FromSqlRaw(" exec [dbo].[pr_ExecuteFacilityQCRules]").ToListAsync();
存储过程做一些其他的事情,并吐出模拟表结构的数据行。有趣的是我有另一个设置类似的对象,运行没有问题。这个似乎直到最近才起作用,但我不确定这到底是什么时候开始发生的,或者为什么我没有更改对象或表结构。基本上,EF Core 认为 Assessor 列是一个关键,尽管我没有指定。这是怎么发生的?我怎么告诉它它不是钥匙?
【问题讨论】:
-
主键不是身份字段,是吗?如果没有,您如何管理这些价值观?
-
为什么
QCIDuniqueidentifier 而不是ID?
标签: c# sql-server asp.net-mvc .net-core entity-framework-core