Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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# RESTAPI—如何使用实体处理POST更新';儿童收藏_C#_Mysql_Asp.net_Entity Framework_Rest - Fatal编程技术网

C# RESTAPI—如何使用实体处理POST更新';儿童收藏

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

我正在使用ASP.NETWebAPI和EntityFramework6与MySQL构建RESTAPI

通过前端[Angular.js]web应用程序,用户可以
将实体发布到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; }
}