Howdee,我在实体框架中遇到问题,告诉我对象确实存在时,我的数据库中不存在这些对象,并且我已经使用 .到表方法。以下是我将上下文注入控制器的方式:
在启动中.cs => 配置服务
var connection = @"Server={myserver};
Initial Catalog={mydb};Persist Security Info=False;
User ID={myId};Password={mypassword};MultipleActiveResultSets=False;
Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;";
services.AddDbContext<MyContext>(options => options.UseSqlServer(connection));
在 MyController 中.cs
public class MyController : Controller
{
[HttpPost("myroute")]
public async Task<IActionResult> CreateUser([FromBody] MyUser myUser)
{
try
{
var user = _context.MyUser
.Where(y => y.UserName == myUser.UserName)
.FirstOrDefault();
if (user != null)
{
var result = await _signInManager.UserManager.CreateAsync(myUser);
if (result.Succeeded) return Ok();
}
}
catch (Exception ex)
{
_logger.LogError($"Create User Error: {ex}");
}
return BadRequest();
}
}
在我的语境中.cs
public class MyContext : DbContext
{
public MyContext(DbContextOptions<MyContext> options)
: base(options)
{
}
public DbSet<MyApi.DataAccess.Entities.MyUser> MyUser { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<MyApi.DataAccess.Entities.MyUser>()
.ToTable("dbo.MyUsers");
}
}
这是我第一次在服务器端代码中进行异步编程,所以有可能在那里?我已经在控制台应用程序中测试了连接字符串,并且能够通过控制台应用程序 (C# .Net( 连接到数据库,因此我假设这不是问题(另外,我直接从 Azure 获取了连接字符串(。提前感谢您的帮助!
在 EF(核心(配置(数据批注和流畅 API(中,表名与架构分开。
从表名中删除"dbo."
,并将ToTable
重载与 name
和 schema
参数一起使用:
.ToTable("MyUsers", "dbo");
或者考虑到dbo
是默认架构(如果没有以不同方式配置(,只需:
.ToTable("MyUsers");
与目前一样,它考虑了当然不存在的表格dbo.dbo.MyUsers
。