C# EF 6.0-更新与EntityState的关系。已修改

C# EF 6.0-更新与EntityState的关系。已修改,c#,entity-framework,asp.net-mvc-5,C#,Entity Framework,Asp.net Mvc 5,在具有以下(简化)模型的ASP.NET MVC5应用程序中: 公共类客户 { [关键] [数据库生成(DatabaseGeneratedOption.Identity)] 公共Guid CustomerID{get;set;} 公共字符串名称{get;set;} 公共字符串PrimaryContact{get;set;} 公共字符串电子邮件{get;set;} 公共字符串PhoneNumber{get;set;} 公共转售商转售商{get;set;} } 公共类经销商 { [关键] [数据库生

在具有以下(简化)模型的ASP.NET MVC5应用程序中:

公共类客户
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共Guid CustomerID{get;set;}
公共字符串名称{get;set;}
公共字符串PrimaryContact{get;set;}
公共字符串电子邮件{get;set;}
公共字符串PhoneNumber{get;set;}
公共转售商转售商{get;set;}
}
公共类经销商
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共Guid公司ID{get;set;}
公共ICollection客户{get;set;}
}
我希望能够更新与客户关联的经销商。尝试通过将客户实体标记为已修改来更新客户实体时(
ctx.Entry(Customer.State=EntityState.Modified
),除经销商的CompanyID外,所有列都会更新。据我所知,
Modified
将所有字段标记为脏字段并更新所有字段,但这里不会发生这种情况

以下是控制器更新客户的操作。我已检查,并且在传入型号中正确设置了经销商的正确公司ID:

[HttpPost]
公共行动结果编辑(客户)
{
if(ModelState.IsValid)
{
使用(var ctx=new DbContext())
{
ctx.Entry(customer.State=EntityState.Modified;
ctx.SaveChanges();
返回RedirectToAction(“Info”,new{id=customer.CustomerID});
}
}
返回视图(客户);
}
调用SaveChanges时,将生成以下SQL。注意:查询中不包括分销商公司ID:

更新[dbo].[Customer]
设置[姓名]=@0、[主要联系人]=@1、[电子邮件]=@2、[电话号码]=@3
其中([CustomerID]=@4)
--@0:“示例客户iuhiuhi”(类型=字符串,大小=-1)
--@1:'Joe Bloggs'(类型=字符串,大小=-1)
-- @2: 'example@example.com'(类型=字符串,大小=-1)
--@3:'123456789'(类型=字符串,大小=-1)
--@4:'e4b9e8d3-9f92-e811-baa4-3052cb3d0eb2'(类型=Guid)

即使它是客户实体的一部分。

将经销商ID添加到客户模型中

公共类客户
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共Guid CustomerID{get;set;}
公共字符串名称{get;set;}
公共字符串PrimaryContact{get;set;}
公共字符串电子邮件{get;set;}
公共字符串PhoneNumber{get;set;}
公共Guid RELESERID{get;set;}
[ForeignKey(“转销商”)]
公共转售商转售商{get;set;}
}

然后更改经销商ID

将经销商ID添加到客户模型

公共类客户
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共Guid CustomerID{get;set;}
公共字符串名称{get;set;}
公共字符串PrimaryContact{get;set;}
公共字符串电子邮件{get;set;}
公共字符串PhoneNumber{get;set;}
公共Guid RELESERID{get;set;}
[ForeignKey(“转销商”)]
公共转售商转售商{get;set;}
}

然后更改经销商ID

CompanyID
是主键,因此您无法更新它。我不想更改
CompanyID
-我想更新客户,使其具有不同的
CompanyID
设置状态,因为修改只会影响标量属性,不是导航属性。
CompanyID
是主键,因此您无法更新它。我不想更改
CompanyID
-我想更新客户,使其具有不同的
CompanyID
设置状态,因为修改只影响标量属性,而不影响导航属性。