无效的对象名称错误 - 实体框架核心 2.0



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重载与 nameschema 参数一起使用:

.ToTable("MyUsers", "dbo");

或者考虑到dbo是默认架构(如果没有以不同方式配置(,只需:

.ToTable("MyUsers");

与目前一样,它考虑了当然不存在的表格dbo.dbo.MyUsers

最新更新