mariadb 我的主键不会增加/生成,实体框架核心

mlnl4t2r  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(216)

当我想将这个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>
9q78igpj

9q78igpj1#

我或者说PanagiotisKanavos找到了解决办法。
我一直使用MySql.EntityFrameworkCore,我从来没有遇到过问题,直到现在。
这是一个来自Oracle的驱动程序,从来没有维护过那么多。它也只有 * 200万次下载 *。
在那之后PanagiotisKanavos推荐我Pomelo.EntityFrameworkCore.MySql。它更出名,更稳定,不那么脆弱。它也有 * 3700万下载 *。
我安装了这个Nuget,不得不在我的Program.cs中更改只有一件事,它不再被称为

.UseMySQL(connectionString)

但是

.UseMySql(connectionString, mySqlDbVersion)

对于这一点,也有完美的内置解决方案,它看起来像这样

.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString))

但总而言之,语法是一样的,所有命令照常工作,我奇怪的错误被修复

相关问题