C# RESTAPI—如何使用实体处理POST更新';儿童收藏
我正在使用ASP.NETWebAPI和EntityFramework6与MySQL构建RESTAPI 通过前端[Angular.js]web应用程序,用户可以C# RESTAPI—如何使用实体处理POST更新';儿童收藏,c#,mysql,asp.net,entity-framework,rest,C#,Mysql,Asp.net,Entity Framework,Rest,我正在使用ASP.NETWebAPI和EntityFramework6与MySQL构建RESTAPI 通过前端[Angular.js]web应用程序,用户可以将实体发布到API以进行更新,但我不确定应该如何处理可能对该实体的子集合进行的任何更新 目前我正在做这样的事情: public async Task Post([FromBody]List<ConfiguredAPIDTO> configuredAPIs) { using (PAMDatabase
将实体发布到API以进行更新,但我不确定应该如何处理可能对该实体的子集合进行的任何更新
目前我正在做这样的事情:
public async Task Post([FromBody]List<ConfiguredAPIDTO> configuredAPIs)
{
using (PAMDatabase db = new PAMDatabase(WebApiConfig.PAMConnectionString))
{
// Loop through each Configured API DTO object that was supplied
foreach (ConfiguredAPIDTO Capi in configuredAPIs)
{
// Locate the corresponding entity in the database
var dbcapi = db.context.configuredAPIs.FirstOrDefault(c => c.configuredAPIID == Capi.configuredAPIID);
// Use AutoMapper to update existing entity object
Mapper.Map<ConfiguredAPI, configuredAPI>(Capi, dbcapi);
}
// Save updated entities to DB
await db.context.SaveChangesAsync(); // throws an InvalidOperationException
}
}
目前,我可以确认AutoMapper正在使用新属性正确更新configuredAPI
,并且也正在正确更新configuredAPI.ConfigureDapieExternalLurls
子集合-但是当我调用SaveChangesSync()
时,我得到一个InvalidOperationException
首先,我不确定我应该做多少手动检查来帮助实体框架。当我像这样更新实体时,它会自动删除任何孤立对象吗?或者我应该手动比较旧的和新的子集合,以查看发生了什么变化,并相应地执行我自己的删除/插入操作?另外,EF是否要求我的外键正确,或者只是将一个对象插入到集合中,以使其足以理解发生了什么。也许我的整个模式在这里是错误的,我应该分别处理每个实体
public class ConfiguredAPIDTO
{
public int configuredAPIID { get; set; }
public string internalBaseURL { get; set; }
public int orgID { get; set; }
public bool preventDefaultEndpointAssignment { get; set;}
public Api api { get; set; }
public ICollection<ConfiguredAPIExternalURLDTO> configuredAPIExternalURLs { get; set; }
}
public class ConfiguredAPIExternalURL
{
public string configuredAPIExternalBaseURL { get; set; }
public int configuredAPIID { get; set; }
}