ArgumentException:调用“DbSet.Find”时位置 0 处的键值类型为“string”,与 int 的属性类型不匹配;

发布于 2025-01-10 08:37:30 字数 1014 浏览 0 评论 0原文

当我尝试编辑我的帖子时,会引发此错误。

这是我的代码:

public async Task<IActionResult> Edit(string id)
{
    if (id == null)
    {
        return NotFound();
    }
    // issue 
    var news = await _context.News.FindAsync(id);
    if (news == null)
    {
        return NotFound();
    }
    return View(news);
}

调试器将代码停止在

var news = await _context.News.FindAsync(id);

我的模型的代码

public int id { get; set; }
[Required(ErrorMessage = "Enter your name.")]
public string Author { get; set; }
[Required(ErrorMessage = "Enter the title.")]
public string Title { get; set; }
[Required(ErrorMessage = "Enter the issued date.")]
[DataType(DataType.Date)]
public DateTime IssueDate { get; set; }
[Required(ErrorMessage = "Enter a message.")]
[DataType(DataType.MultilineText)]
public string Body { get; set; }

处,您知道如何解决此问题吗?

This error is thrown when I try to edit my post.

Here is my code:

public async Task<IActionResult> Edit(string id)
{
    if (id == null)
    {
        return NotFound();
    }
    // issue 
    var news = await _context.News.FindAsync(id);
    if (news == null)
    {
        return NotFound();
    }
    return View(news);
}

The debugger stops the code at

var news = await _context.News.FindAsync(id);

Code for my model is

public int id { get; set; }
[Required(ErrorMessage = "Enter your name.")]
public string Author { get; set; }
[Required(ErrorMessage = "Enter the title.")]
public string Title { get; set; }
[Required(ErrorMessage = "Enter the issued date.")]
[DataType(DataType.Date)]
public DateTime IssueDate { get; set; }
[Required(ErrorMessage = "Enter a message.")]
[DataType(DataType.MultilineText)]
public string Body { get; set; }

Any idea on how to fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

待天淡蓝洁白时 2025-01-17 08:37:30

根据文档:

FindAsync(Object[])

查找具有给定主键值的实体。如果一个实体具有
上下文正在跟踪给定的主键值,然后它
立即返回,无需向数据库发出请求。
否则,将向数据库查询具有以下属性的实体:
给定主键值,并且该实体(如果找到)将附加到
上下文并返回。如果没有找到实体,则返回 null。

因此,如果您的情况中的主键具有 int 类型,则 FindAsync() 参数应为相同的 int 类型。

According to the documentation:

FindAsync(Object[])

Finds an entity with the given primary key values. If an entity with
the given primary key values is being tracked by the context, then it
is returned immediately without making a request to the database.
Otherwise, a query is made to the database for an entity with the
given primary key values and this entity, if found, is attached to the
context and returned. If no entity is found, then null is returned.

Therefore, if the primary key in your case has int type, then the FindAsync() parameter should be the same type int.

为你鎻心 2025-01-17 08:37:30

最可靠的方法是

var _id=Convert.ToInt32(id);

  var news = await _context.News.FirstOrDefaultAsync(i=>i.id==_id);

,但也许改变一个动作更好?

public async Task<IActionResult> Edit(int? id)

The most reliable way would be

var _id=Convert.ToInt32(id);

  var news = await _context.News.FirstOrDefaultAsync(i=>i.id==_id);

but maybe it is better to change an action?

public async Task<IActionResult> Edit(int? id)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文