C# ASP.NET中,项的实体放置请求不会更新数据库关系
我的模型由三个实体组成:设备、组和用户 看起来是这样的,设备组和组用户之间存在多对多关系: (抱歉,尚未在正文中包含图像) 我通过VisualStudio生成的控制器发出PUT命令C# ASP.NET中,项的实体放置请求不会更新数据库关系,c#,asp.net,entity-framework,crud,C#,Asp.net,Entity Framework,Crud,我的模型由三个实体组成:设备、组和用户 看起来是这样的,设备组和组用户之间存在多对多关系: (抱歉,尚未在正文中包含图像) 我通过VisualStudio生成的控制器发出PUT命令 public HttpResponseMessage PutDevice(int id, Device device) { if (!ModelState.IsValid) { return Request.CreateErrorResponse(HttpStatusCode.Bad
public HttpResponseMessage PutDevice(int id, Device device)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
if (id != device.DeviceId)
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
db.Entry(device).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException ex)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
}
return Request.CreateResponse(HttpStatusCode.OK);
}
当我更改简单属性(如名称或描述)时,实体更新似乎进展顺利。
但是,我的问题是,当我尝试更改设备中的组时,数据库似乎没有更新。
我的印象是EF的全部目的是自动管理多对多关系中的隐含变化。我是否必须明确地采取额外的步骤
设备型号如下所示:
public partial class Device
{
public Device()
{
this.Groups = new HashSet<Group>();
}
public int DeviceId { get; set; }
public string Name { get; set; }
public int Number { get; set; }
public string IpAddress { get; set; }
public string Version { get; set; }
public string Description { get; set; }
public virtual ICollection<Group> Groups { get; set; }
}
公共部分类设备
{
公共设备()
{
this.Groups=newhashset();
}
公共int设备ID{get;set;}
公共字符串名称{get;set;}
公共整数{get;set;}
公共字符串IpAddress{get;set;}
公共字符串版本{get;set;}
公共字符串说明{get;set;}
公共虚拟ICollection组{get;set;}
}
这里是输入PutDevice(int-id,Device-Device)方法时设备对象的屏幕截图:
提前谢谢 在断开连接的场景中重新连接实体有两个步骤:
设备
实体上的实体状态
设置为已修改
,将把对象图中的所有实体附加到上下文中。但是,它会将所有子实体标记为未更改
状态。这与上面的步骤1相对应
要使子实体保持其更改,您需要在图形上迭代,并按照上面的步骤2将更改状态设置为Modified
例如:
context.Entry(device.Group).State = EntityState.Modified
在调试器中,我没有得到任何错误,它返回HttpStatusCode.OK。传递给PutDevice()的设备内容在我问题末尾的屏幕截图上可见。但是,当我调用GetDevices()时,设备仍然有与之关联的旧组。