繁体   English   中英

实体框架6外键未在附加和保存时更新

[英]Entity framework 6 foreign key is not being updated on attach and save

尝试更新实体对象时,实体框架6没有更新外键时出现问题。 它适用于插入(但是为了不将新实体重新插入外键表,我必须将状态设置为“不变”)。 我正在使用代码优先方法,并自己生成了模型。 这是一个Web应用程序,因此实体对象被分离,因此我必须重新附加它们。

我创建了一个简化的示例,因此很容易解释我的问题所在。 在这个例子中,我有一个汽车对象,它具有一对多的关系。 我想更新汽车并更改其名称和名称。 名称会更新,但外键值不会更新。 我如何继续获取也要更新的外键?

附加代码处理

public void UpdateCars(Car car){
    var dbContext = new CarsDbContext(); //Inherits DbContext
    dbContext.Cars.Attach(car);
    dbContext.Entry(car).State = EntityState.Modified;
    dbContext.SaveChanges();
}

汽车实体

[Table("Car")]
public class Car
{
    public Guid Id { get; set; }

    public String Name { get; set; }

    public virtual Make Make { get; set; }
}

[Table("Make")]
public class Make
{
    public Guid Id { get; set; }

    public String Name { get; set; }
}

编辑:

我在注释的帮助下做了一些更改(谢谢!),我做了一些工作,但是感觉好像我做错了方法,因为代码远非美观。 这是我所做的:

将Car对象修改为:

    public String Name { get; set; }

    public Guid Make_Id

    [ForeignKey("Make_Id")]
    public virtual Make Make { get; set; }

在我的更新中

    var dbContext = new CarsDbContext(); //Inherits DbContext
    car.Make_Id = car.Make.Id;
    dbContext.Cars.Attach(car);

当与分离的实体一起工作时,首先进行EF代码时,肯定有更好的做法吗?

我最终使用graphdiff解决了我所有的问题。 同样,当我的实体变得更加复杂并且它尝试多次附加同一实体时。 这是一篇要阅读的文章: http : //blog.brentmckendrick.com/introducing-graphdiff-for-entity-framework-code-first-allowing-automated-updates-of-a-graph-of-detached-entities/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM