【问题标题】:Add list of results to database in ASP.NET MVC [closed]在 ASP.NET MVC 中将结果列表添加到数据库 [关闭]
【发布时间】:2020-06-19 05:23:10
【问题描述】:

这是我的控制器:

string responseString = reader.ReadToEnd();
dynamic jsonData = JsonConvert.DeserializeObject(responseString);
var results = new List<Result>();
foreach (var item in jsonData.items)
{
    results.Add(new Result { 
        Title = item.title, 
        Link = item.link, 
        Snippet = item.snippet,
    });
    db.Results.AddRange(results);
    db.SaveChanges();
}
return View(results.ToList());

但我收到此错误:

违反主键约束“PK_Result”。无法在对象“dbo.Result”中插入重复键。重复键值为 (0)。 声明已终止。

我该如何解决?

【问题讨论】:

  • 你的对象的主键是怎么生成的?

标签: c# html sql-server asp.net-mvc entity-framework


【解决方案1】:
var results = new List<Result>();
foreach (var item in jsonData.items)
{
    results.Add(new Result { 
        Title = item.title, 
        Link = item.link, 
        Snippet = item.snippet,
    });
    db.Results.AddRange(results);
    db.SaveChanges();
}

在第一行你已经初始化了新的 List。

然后在jsonData.items的每个枚举上:

  1. 您将 Result 类型的新实例添加到结果列表中。
  2. 您将整个收藏添加到db.Results DbSet。因为db.Results.AddRange

我认为你想要这样的东西:

var results = new List<Result>();
foreach (var item in jsonData.items)
{
    var result = new Result { 
        Title = item.title, 
        Link = item.link, 
        Snippet = item.snippet,
    };
    db.Results.Add(result);
}
db.SaveChanges();

【讨论】:

  • 感谢您的回答,但是当我这样做时: db.Results.Add(result) ... 我得到了一个错误(红线)但是当我执行 db.Results.Add(results) 我得到了什么都没有,但它不起作用
  • 您能否分享一下您目前拥有的代码示例,并详细说明您遇到了什么样的编译错误?
【解决方案2】:

您可能应该在results.Add() 方法中包含主键值。 在这里,您尝试为标题、链接和 sn-p 添加值。

我相信它们都不是主键。 这就是为什么它采用默认值(0)作为主键。

您可以检查数据库表中的主键字段,并将其包含在results.Add() 方法中。

【讨论】:

  • 是的,你是对的,我没有包含主键,但我希望它是自动递增的,因为我不会控制结果
  • 然后您可以将该表字段设置为 IDENTITY,这样您就不必手动添加它的值,它会自动递增。即 ItemId int IDENTITY(1,1) PRIMARY KEY w3schools.com/sql/….
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 2016-05-30
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 2021-11-30
相关资源
最近更新 更多