C# 附加和保存时未更新实体框架6外键
当我尝试更新实体对象时,entity framework 6没有更新外键存在问题。它可以在insert上工作,但是我必须将状态设置为“未更改”,以便不在外键表中重新插入新实体。我使用代码优先的方法,自己生成模型。这是一个web应用程序,所以实体对象被分离,所以我必须重新连接它们 我创建了一个简化的示例,因此很容易解释我的问题是什么。在这个例子中,我有一个car对象,它有一个一对多的关系。我想更新一辆车,改变它的品牌和名称。将更新名称,但不会更新外键值。我如何继续更新外键 处理附加数据的代码C# 附加和保存时未更新实体框架6外键,c#,sql-server,sql-update,entity-framework-6,foreign-key-relationship,C#,Sql Server,Sql Update,Entity Framework 6,Foreign Key Relationship,当我尝试更新实体对象时,entity framework 6没有更新外键存在问题。它可以在insert上工作,但是我必须将状态设置为“未更改”,以便不在外键表中重新插入新实体。我使用代码优先的方法,自己生成模型。这是一个web应用程序,所以实体对象被分离,所以我必须重新连接它们 我创建了一个简化的示例,因此很容易解释我的问题是什么。在这个例子中,我有一个car对象,它有一个一对多的关系。我想更新一辆车,改变它的品牌和名称。将更新名称,但不会更新外键值。我如何继续更新外键 处理附加数据的代码 pu
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; }
}
编辑:
在评论的帮助下,我做了更多的修改,谢谢大家!我做了一些工作,但感觉我做得不对,因为代码很不漂亮。以下是我所做的:
将汽车对象修改为:
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,解决了我所有的问题。同样,当我的实体变得更复杂时,它多次尝试攻击同一个实体。这里有一篇文章可以阅读:您是否也尝试过附加和设置Make实体的状态,我怀疑这会起作用。您的Car对象是否真的没有外键.Id的属性,或者您是否为了简洁而省略了它?@BenRobinson感谢您的建议,但遗憾的是它没有起作用。我尝试过:dbContext.Makes.Attachcar.Make;dbContext.Entrycar.Make.State=EntityState.Modified;不work@ArneHB,这需要在汽车对象上声明一个属性,如public Guid MakeId{get;set;}。virtual关键字允许EF连接延迟加载和更改跟踪。这就是全部。