C# 在ASP.NET CORE应用程序中,EF CORE library不返回新插入的记录';数据库中的身份证?
我有一个asp.NETWebAPI项目,下面的查询运行良好 将数据添加到数据库中,并在C# 在ASP.NET CORE应用程序中,EF CORE library不返回新插入的记录';数据库中的身份证?,c#,mysql,asp.net,entity-framework,asp.net-web-api,C#,Mysql,Asp.net,Entity Framework,Asp.net Web Api,我有一个asp.NETWebAPI项目,下面的查询运行良好 将数据添加到数据库中,并在\u context.SaveChanges()之后返回新添加的ID 我正在使用MYSQL数据库。它也必须在MYSQL中工作:( 但是,当我使用EF CORE将asp.net webapi代码迁移到asp.net CORE时,成功地将新记录插入数据库,但在\u context.SaveChanges()之后,它将0作为新Id返回 public partial class Student {
\u context.SaveChanges()之后返回新添加的ID
我正在使用MYSQL数据库。它也必须在MYSQL中工作:( 但是,当我使用EF CORE将
asp.net webapi代码迁移到asp.net CORE时,成功地将新记录插入数据库,但在\u context.SaveChanges()
之后,它将0作为新Id返回
public partial class Student
{
public int Id { get; set; }
public string name { get; set; }
}
Student student = new Student()
student.name = "test";
_context.Add(student);
_context.SaveChanges()
int newID = student.Id ;
//在asp.net webapi中获取了自动生成的Id,但在asp.net核心项目中该Id为0
有什么线索吗?这对我来说既不是EF Core 1.2也不是2.0
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
namespace ConsoleApp8
{
public partial class Student
{
public int Id { get; set; }
public string name { get; set; }
}
public class Db : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=localhost;database=EfCoreTest;Integrated Security=true;MultipleActiveResultsets=false");
base.OnConfiguring(optionsBuilder);
}
}
class Program
{
static void Main(string[] args)
{
using (var db = new Db())
{
db.Database.EnsureDeleted();
db.Database.EnsureCreated();
Student student = new Student();
student.name = "test";
db.Add(student);
db.SaveChanges();
int newID = student.Id;
Console.WriteLine($"NewID {newID}");
}
Console.WriteLine("Hit any key to exit.");
Console.ReadKey();
}
}
}
使用Microsoft.EntityFrameworkCore;
使用制度;
使用System.Collections.Generic;
使用System.Data.SqlClient;
使用System.Linq;
使用System.Threading.Tasks;
名称空间控制台App8
{
公立部分班学生
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
公共类Db:DbContext
{
公共数据库集学生{get;set;}
配置时受保护的覆盖无效(DBContextOptions Builder Options Builder)
{
optionsBuilder.UseSqlServer(“服务器=本地主机;数据库=EfCoreTest;集成安全性=true;MultipleActiveResultsets=false”);
基本配置(选项生成器);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
使用(var db=new db())
{
db.Database.EnsureDeleted();
db.Database.recreated();
学生=新生();
student.name=“测试”;
db.Add(学生);
db.SaveChanges();
int newID=student.Id;
Console.WriteLine($“NewID{NewID}”);
}
控制台。WriteLine(“按任意键退出”);
Console.ReadKey();
}
}
}
我也遇到了同样的问题。就我而言,我首先使用了数据库。
我的脚手架被标记为使用数据站
dotnet ef dbcontext scaffold "Host=localhost;Port=3306;Database=dbtest;Usernt=root;Password=mypass" -o "Entities" Pomelo.EntityFrameworkCore.MySql -c "DatabaseRepository" -f -d
即使标记为“data anotation”,也会在上下文中的onModelCreate方法中生成一些FluentAPI脚本
modelBuilder.Entity<MyEntity>(entity =>
//{
// entity.Property(e => e.Id).ValueGeneratedNever();
//});
modelBuilder.Entity(Entity=>
//{
//Property(e=>e.Id).ValueGeneratedNever();
//});
验证是否有在Id属性中设置ValueGeneratedNever的类似代码。更改为ValueGeneratedAnd
如何使用data anotation代替FluentAPI,我删除了onModelCreate方法中的代码
使用两个选项中的一个,应该有效。请包括学生的源代码
。添加到问题中,请检查学生
实体的主键是什么?如果您对此不做任何说明,它将是Id
,但是从您得到的错误来看,它可能是名称
属性吗?您可以通过调用ConfigureServices
中的AddConsole
和AddDebug
为日志提供服务。主键是Id
,它是自动生成的字段。没有错误,但唯一的问题是,当我将asp.net core与EF core一起使用时,我没有得到新插入的Id。我有一个相同的问题。我正在使用asp.net core 2和EF 2,即h MariaDB数据库。连接器是Pomelo版本2.0。我使用的是MYSQL数据库。它也必须在MYSQL中工作:(–1小时前我不知道MYSQL。这个复制程序不适用于MYSQL吗?工作正常,记录也被添加到数据库表中,但在db.SaveChanges()之后始终获得Id为0);int newID=student.Id;不知道为什么:(