Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新实体框架6中的附加条目而不修改外键_C#_Entity Framework - Fatal编程技术网

C# 更新实体框架6中的附加条目而不修改外键

C# 更新实体框架6中的附加条目而不修改外键,c#,entity-framework,C#,Entity Framework,假设你有下面的模型 班车{ int Id{get;set;} 公共虚拟列表{get;set;} } 头等舱乘客{ int Id{get;set;} [外国钥匙车] int CarId{get;set;} 公共虚拟汽车{get;set;} 公共字符串名称{get;set;} } 您在修改名称时没有让Entity Framework加载模型,只知道ID,而不知道汽车-在我的例子中,也通过禁用自动加载和验证,因为我正在处理一个巨大的数据集 做如下事情会出错 CarDbContext上下文=新的CarD

假设你有下面的模型

班车{ int Id{get;set;} 公共虚拟列表{get;set;} } 头等舱乘客{ int Id{get;set;} [外国钥匙车] int CarId{get;set;} 公共虚拟汽车{get;set;} 公共字符串名称{get;set;} } 您在修改名称时没有让Entity Framework加载模型,只知道ID,而不知道汽车-在我的例子中,也通过禁用自动加载和验证,因为我正在处理一个巨大的数据集

做如下事情会出错

CarDbContext上下文=新的CarDbContext;//DbContext的子类 乘客=新乘客; 乘客Id=1;//这是从天堂,或是从URL,或是别的什么地方寄给你的 乘客。姓名=史蒂夫;//这是您更新的变量 上下文。附件乘客; DbEntityEntry dbEntry=context.Entrypassenger; dbEntry.Propertye=>e.Name.IsModified=true;//我们改了名字,但是。。。 dbEntry.Propertye=>e.CarId.IsModified=false;//我们没有更改外键 context.SaveChanges;//仍然会产生错误!
错误是:无法确定关系的主体端。多个添加的实体可能具有相同的主键。

要避免此错误,必须将CarId设置为一个值,但仍可以将其标记为未修改。您似乎正在进行的更改不会传播到您的数据存储中

//[…]来自上一个样本 passenger.CarId=9001;//超过9000 dbEntry.Propertye=>e.CarId.IsModified=false;//我们没有更改外键 context.SaveChanges;//作品