使用复合键更新实体上的CurrentValues()

时间:2017-03-06 08:52:43

标签: c# entity-framework-core

我在netstandard1.6应用程序中使用EFCore 1.1.0。

我已使用复合键

配置了我的模型
public class ClassExtension
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int ClassId { get; set; }
    public MyClass Class { get; set; }
}

public class MyClass 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<ClassExtension> Extensions { get; set; }

    public Class()
    {
        Extensions = new List<ClassExtension>();
    }
}

然后在我的dbcontext OnModelCreating()

modelBuilder.Entity<ClassExtension>()
   .HasKey(p => new { p.Id, p.ClassId });

然后我从数据库中获取特定复合键的现有实例,然后根据用户输入在代码中创建一个新的ClassExtension实例,最后将这些值分配给实体然后保存。

var existingSpec = await db.ClassSpecs.Where(
    c => c.ClassId == existingClass.Id && c.Id == input.Id)
    .FirstOrDefaultAsync();

var newExtension = new ClassExtension()
{
    Id = input.Id,
    Name = input.Name
};

db.Entry(existingSpec).CurrentValues.SetValues(newSpec); // Errors on this line
db.Entry(existingSpec).Property(p => p.ClassId).IsModified = false;
await db.SaveChangesAsync()

尝试使用SetValues()

分配值时,应用程序会生成以下错误
{System.InvalidOperationException: The property 'ClassId' on entity type 'ClassExtension' 
is part of a key and so cannot be modified or marked as modified.
... removed ...
at MyApplication...

当我在没有复合键的表上执行此操作时,它可以正常工作,而不是使用null覆盖现有外键Id,只使用其现有值。

是否有我遗漏的东西,或者这只是使用复合键的怪癖?

0 个答案:

没有答案