实体框架更改嵌套对象的参考

时间:2020-10-07 08:05:32

标签: c# entity-framework dbcontext

这是一个简单的问题,但我似乎找不到解决方案。 我有两个类,如下所示:

    public class Person{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int Id{get;set;}
    public string Name {get;set;}
    public CarType Cartype {get;set;}
    }

    public class CarType{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int Id{get;set;}       
    public string Type {get;set;}
    public string CompanyLocation {get;set;}
    }

假设我有两种CarType,如下所示:

   1    Mercedes        Berlin          

   2    Chevrolet       Detroit     

我有一个人,如下:

1 Mike 2 (2 is the foreign key to `CarType`)

问题是,如何将CarType的Mike更改为1(即,将对表CarType中另一行的引用更改)?

这是我的代码:

Person person = dbContext.Persons.Single(c => c.Id == 1);
CarType carType= dbContext.CarTypes.Single(c => c.Id == 1);
person.CarType= carType;

我尝试找到here的答案

但是我在做dbContext.SaveChanges()时仍然遇到相同的错误:

属性“ Id”是对象键信息的一部分,不能 被修改

问题是我不想更新它引用的CarType,我想将引用更改为另一行

1 个答案:

答案 0 :(得分:2)

人应该是这样

public class Person{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int Id{get;set;}
    public string Name {get;set;}
    [ForeignKey("Cartype ")]
    public int CarTypeID{get;set;}
    public CarType Cartype {get;set;}
 }

之后,您可以使用以下方法在Person对象中更改CarType 下面的代码

person.CarTypeID= carType.Id;
dbContext.SaveChanges();