Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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# 为什么在这种情况下SaveAllAsync()>0为false?_C#_Database_Http_Asp.net Web Api_Controller - Fatal编程技术网

C# 为什么在这种情况下SaveAllAsync()>0为false?

C# 为什么在这种情况下SaveAllAsync()>0为false?,c#,database,http,asp.net-web-api,controller,C#,Database,Http,Asp.net Web Api,Controller,SaveAll方法 我的控制器中的UpdateSps方法 if条件为false并引发异常 映射工作正常,这就是为什么我不理解为什么更改无法被识别 非常感谢您的帮助 \u mapper.Map我假设您在处理集合时使用AutoMapper将不会按Id匹配任何内容并更新它 class Order { public int Id { get; set; } } class OrderDto { public int Id { get; set; } } var config = new MapperC

SaveAll方法

我的控制器中的UpdateSps方法

if条件为false并引发异常

映射工作正常,这就是为什么我不理解为什么更改无法被识别

非常感谢您的帮助

\u mapper.Map我假设您在处理集合时使用AutoMapper将不会按Id匹配任何内容并更新它

class Order { public int Id { get; set; } }
class OrderDto { public int Id { get; set; } }

var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>());
var mapper = config.CreateMapper();

var targ1 = new Order {Id = 1};
var targ2 = new Order {Id = 2};
var source = new List<Order> { new Order {Id = 1}};
var target = new List<Order> { targ1, targ2 };
mapper.Map(source, target);
Console.WriteLine(object.ReferenceEquals(target.First(o => o.Id == 1), targ1)); // False - not the same object
Console.WriteLine(target.Count()); // 1
所以我假设wait _repo.GetStepsByIdgoalId代码返回的是被跟踪实体的简单集合,而不是被跟踪的集合,而automapper只是基本上清除它并添加新的项,我假设您使用它时不知道这些项,所以它不能插入或更新任何内容


您需要手动更新/添加/删除所有相应的条目。或者可能有很好的包装,但我不知道。也许有这样的功能,但我不确定。

是的,就是这个:
    [HttpPut("{goalId}/steps")]
    public async Task<IActionResult> UpdateSteps(int userId, long goalId, IEnumerable<Step> steps)
    {
        if (userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            return Unauthorized();

        var stepsFromRepo = await _repo.GetStepsById(goalId);

        _mapper.Map(steps, stepsFromRepo);

        if (await _repo.SaveAll())
            return NoContent();

        throw new Exception("Updating steps failed");
    }
class Order { public int Id { get; set; } }
class OrderDto { public int Id { get; set; } }

var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>());
var mapper = config.CreateMapper();

var targ1 = new Order {Id = 1};
var targ2 = new Order {Id = 2};
var source = new List<Order> { new Order {Id = 1}};
var target = new List<Order> { targ1, targ2 };
mapper.Map(source, target);
Console.WriteLine(object.ReferenceEquals(target.First(o => o.Id == 1), targ1)); // False - not the same object
Console.WriteLine(target.Count()); // 1