【问题标题】:DbUpdateException error trying to use EF core code first尝试首先使用 EF 核心代码的 DbUpdateException 错误
【发布时间】:2020-07-15 22:30:55
【问题描述】:

我有一个简单的 Web API,我正在尝试首先使用实体​​框架核心代码,并在 AWS RDS 上托管一个外部 sql 服务器数据库。我的目标是让 EF 根据我的上下文和模型自动创建我的模型数据库/表,这是我第一次使用 Swagger 创建对象时。虽然当我尝试使用 Swagger 将对象发布到我的 API 时,不会创建表,而是出现以下错误:Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'Users'.

我是否设置了错误的 EF?

数据库上下文:

namespace FitnessTrackerAPI.Data
{
    public class FitnessTrackerAPIContext : DbContext
    {
        public FitnessTrackerAPIContext (DbContextOptions<FitnessTrackerAPIContext> options)
            : base(options)
        {
        }

        public DbSet<FitnessTracker.UserData> Users { get; set; }

        public DbSet<FitnessTracker.WorkoutData> Workouts { get; set; }
    }
}

我还在 Startup.cs 中添加了以下内容:

    public void ConfigureServices(IServiceCollection services)
    {
         services.AddDbContext<FitnessTrackerAPIContext>(options =>
         options.UseSqlServer(Configuration.GetConnectionString("FitnessTrackerAPIContext")));
         ....

    private void InitializeDatabase(IApplicationBuilder app)
    {
         using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
         {
                var context = serviceScope.ServiceProvider.GetRequiredService<FitnessTrackerAPIContext>();
                context.Database.Migrate();
         }
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        //Apply pending migrations
        InitializeDatabase(app);
        ....

appsettings.json 中的连接字符串:"ConnectionStrings": { "FitnessTrackerAPIContext": "Server=fitnessapi.clxnbxbuoxx1.eu-west-1.rds.amazonaws.com,1433;User ID=XXXXX;Password=XXXXX; Initial Catalog=fitnessapi; Database=fitnessapi; Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"

【问题讨论】:

  • InitializeDatabase() 被调用了吗?
  • 对不起,我的意思是它实际上是在运行时执行的吗?
  • 尝试调用context.Database.EnsureCreated();,我不是 EF 专业人士,您需要阅读此方法,因为我认为您应该只调用一次。 stackoverflow.com/questions/42355481
  • 那个方法有效吗?
  • 确实成功了,再次感谢

标签: c# asp.net amazon-web-services asp.net-web-api


【解决方案1】:

您需要致电context.Database.EnsureCreated(); 以“确保”表已创建。有关此method here 的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多