当我想将这个NotebookModel添加到我的DB中时,它没有获得ID(它仍然是INT 32的默认值)。
通常在SaveChangesAsync()
之后,对象会自动分配一个ID,这也适用于其他模型。但不适用于这些模型,尽管它们是以相同的方式构建的。
回答几个问题:
- -是,数据库已创建
- 是,模型在DbSet中
- 是的,我已经重建了API*
我是不是忽略了什么?
C#代码:
NotebookModel newNotebook = new NotebookModel();
_db.Notebook.Add(newNotebook);
await _db.SaveChangesAsync();
笔记本-型号:
public class NotebookModel
{
[Key]
public int Id { get; set; }
public List<NoteModel> Notebook { get; set; } = new List<NoteModel>();
}
注-型号:
public class NoteModel
{
[Key]
public int Id { get; set; }
[Required(ErrorMessage = "Name is missing!")]
public string Name { get; set; } = default!;
public string? Value { get; set; }
[Required(ErrorMessage = "CreationDate is missing!")]
public DateTime CreationDate { get; set; } = default!;
[Required(ErrorMessage = "LastEditDate is missing!")]
public DateTime LastEditDate { get; set; } = default!;
}
数据库上下文:
public class DataBaseContext : DbContext
{
public DataBaseContext(DbContextOptions<DataBaseContext> options) : base(options)
{
}
public DbSet<NotebookModel> Notebook { get; set; }
public DbSet<NoteModel> Note { get; set; }
}
错误响应:
Microsoft.EntityFrameworkCore.DbUpdateException: Could not save changes. Please configure your entity type accordingly.
---> MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DEFAULT VALUES();
SELECT `Id`
FROM `Notebook`
WHERE ROW_COUNT() = 1 AND `I...' at line 2
我的Csproj文件:
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.4">
<PackageReference Include="MySql.EntityFrameworkCore" Version="7.0.0" />
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
1条答案
按热度按时间9q78igpj1#
我或者说PanagiotisKanavos找到了解决办法。
我一直使用
MySql.EntityFrameworkCore
,我从来没有遇到过问题,直到现在。这是一个来自
Oracle
的驱动程序,从来没有维护过那么多。它也只有 * 200万次下载 *。在那之后PanagiotisKanavos推荐我
Pomelo.EntityFrameworkCore.MySql
。它更出名,更稳定,不那么脆弱。它也有 * 3700万下载 *。我安装了这个Nuget,不得不在我的
Program.cs
中更改只有一件事,它不再被称为但是
对于这一点,也有完美的内置解决方案,它看起来像这样
但总而言之,语法是一样的,所有命令照常工作,我奇怪的错误被修复!