C#中使用EF Core查询MySQL时,主键列名不正确
P粉736935587
2023-08-17 13:45:14
<p>我正在学习如何在C#中查询Mysql数据库,但是收到了一个错误,说在列列表中有一个无效的列,但是我无法弄清楚那个列名(ToDoId)是从哪里来的。</p>
<p>表中只有两列(如下所示的模型),而mysql中的主键是<code>Id</code>。那个<code>ToDoId</code>是从哪里来的,我如何强制它变成<code>Id</code>?</p>
<p>我查看了所有的示例代码(来自这里),我相信我已经更新了所有的东西,以正确地添加我的新表。</p>
<p>这是我的模型:</p>
<pre class="brush:php;toolbar:false;">public class ToDo
{
public Guid Id { get; set; }
public string ToDoName { get; set; } = null!;
public ICollection<ToDo> ToDos { get; set; }
public ToDo()
{
ToDos = new HashSet<ToDo>();
}
}</pre>
<p>这是我遇到错误的地方 - 在查询中:</p>
<pre class="brush:php;toolbar:false;">public class ToDoRepository : IToDoRepository
{
private readonly DatabaseContext _context;
public ToDoRepository(DatabaseContext context)
{
_context = context;
}
// 下面的 _context.ToDo 被定义为:public virtual DbSet<ToDo> ToDo { get; set; } = null!;
public IQueryable<ToDo> Query => _context.ToDo.AsQueryable();
// 错误发生在这里...
public IReadOnlyList<ToDo> List => Query
.ToList();
}</pre>
<p>错误信息:</p>
<blockquote>
<p>MySqlConnector.MySqlException: Unknown column 't.ToDoId' in 'field list'</p>
</blockquote><p><br /></p>
保持简单,使用EF 约定,并将您的主键重命名为:
classNameID,所以在您的情况下:
或者按照这里的描述使用Key属性:
友情建议将您的类命名为Todo