属性 'Id'是对象关键信息的一部分,不可修改。在插入

The property 'Id' is part of the object's key information and cannot be modified. On INSERT

我知道还有很多其他问题和我一样,但 none 的答案到目前为止对我有帮助。我正在使用 Code First 创建一个 mvc 网站。到目前为止,一切都很好。数据库已经创建,现在我想使用代码插入一些数据。但是不断收到该死的错误,就好像我没有主键一样。我可以使用 MSSQL 轻松地将数据插入 table。 该诊所已存在于数据库中,我正在使用正确的外键值。

如何创建 table:

//CreateTable(
            "dbo.Department",
            c => new
                {
                    Id = c.Guid(nullable: false, identity: true),
                    Clinic_Id = c.Guid(nullable: false),
                    Title = c.String(),
                    Description = c.String(),
                    LastModifiedAt = c.DateTime(nullable: false),
                    CreatedAt = c.DateTime(nullable: false),
                })
            .PrimaryKey(t => t.Id)
            .ForeignKey("dbo.Clinic", t => t.Clinic_Id)
            .Index(t => t.Clinic_Id);

部门对象:

    public class Department
{
    public Guid Id { get; set; }
    public Guid Clinic_Id { get; set; }
    public Clinic Clinic { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public List<Patient> Patients { get; set; }
    public List<Practitioner> Practitioners { get; set; }
    public DateTime LastModifiedAt { get; set; }
    public DateTime CreatedAt { get; set; }

    public Department()
    {
    }
}

我创建对象

    private void CreateDepartment(Clinic clinic, int departmentNumber)
    {
        Department department = new Department();
        department.Id = Guid.NewGuid();
        department.CreatedAt = DateTime.Now;
        department.Description = "Description";
        department.LastModifiedAt = DateTime.Now;
        department.Clinic_Id = clinic.Id;
        department.Title = "Title";
        DepartmentList.Add(department);
    }

然后尝试将其添加到我的上下文中:

DepartmentList.ForEach(x => context.Departments.Add(x));
            context.SaveChanges();

正在创建 table 你提到

Id = c.Guid(nullable: false, identity: true),

所以它会被视为自动生成的字段

这就是当您尝试手动分配时出现此错误的原因。 如果您需要手动分配它,请使用此

修改您的对象class定义
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }