无效的对象名称错误 - EntityFrameworkCore 2.0

Clo*_*e24 3 c# entity-framework-core azure-sql-database

Howdee,我遇到了实体框架的问题,告诉我这些对象在我的数据库存在时不存在,并且我使用.ToTable方法映射了名称.下面是我如何将上下文注入我的控制器:

在Startup.cs => ConfigureServices中

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));
Run Code Online (Sandbox Code Playgroud)

在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

在MyContext.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");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我第一次进入服务器端代码的异步编程,所以它有可能存在吗?我已经在控制台应用程序中测试了连接字符串,并且我能够通过控制台应用程序(C#.Net)连接到数据库,所以我假设它不是问题(另外,我直接抓住了连接字符串)来自Azure).在此先感谢您的帮助!

Iva*_*oev 6

在EF(Core)配置(数据注释和流畅的API)中,表名与模式分离.

删除"dbo."从表名称,并使用ToTable过载与nameschema参数:

.ToTable("MyUsers", "dbo");
Run Code Online (Sandbox Code Playgroud)

或者考虑到这dbo是默认架构(如果配置不同),只需:

.ToTable("MyUsers");
Run Code Online (Sandbox Code Playgroud)

就目前而言,它考虑dbo.dbo.MyUsers当然不存在的表.