postgresql 添加迁移并更新后,C# EFCore不显示表

yhuiod9q  于 2022-12-03  发布在  PostgreSQL
关注(0)|答案(1)|浏览(210)

我现在正在为大学做一个项目,我试图从数据库中提取一些数据,然后通过rest控制器发送它。
我遇到的问题是,在我执行第一次迁移并更新数据库后,表没有出现在数据库中。此外,我尝试在表中植入一些数据,但仍然不起作用。
DatabaseAccess.cs(继承DbContext的类别)

using Domain.Models;
using Microsoft.EntityFrameworkCore;

namespace EntityDataAccess;

public class DatabaseAccess : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=../EntityDataAccess/sep3db.db");
        base.OnConfiguring(optionsBuilder);
    }

    
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        
        modelBuilder.Entity<User>().HasData(
            new User
            {
                Id = 1,
                Email = "alex@gmail.com",
                Password = "1234",
                Role = "Admin",
                Username = "Alex"
            }
        );
        
        // Constraints, Primary keys, Foreign keys, etc.
        modelBuilder.Entity<User>().HasKey(user => user.Id);
        modelBuilder.Entity<User>().Property(user => user.Id).ValueGeneratedOnAdd();
        
        modelBuilder.Entity<Recipe>().HasKey(recipe => recipe.Id);
        modelBuilder.Entity<Recipe>().Property(recipe => recipe.Id).ValueGeneratedOnAdd();
    }
    
    public DbSet<User>Users { get; set; }

    public DbSet<Recipe> Recipes { get; set; }
    public DbSet<Ingredient> Ingredients { get; set; }
    public DbSet<Description> Descriptions { get; set; }
    public DbSet<Rating> Ratings { get; set; }

}

User.cs(模型类别)

using System.ComponentModel.DataAnnotations;
namespace Domain.Models;

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }  
    public string Email { get; set; }
    public string Role { get; set; }
}

Programs.cs

using EntityDataAccess;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddDbContext<DatabaseAccess>();

var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

编辑:忘了提了,我觉得反正也是无关紧要的,我先试着在PostgreSQL中生成数据库。
此处为:

optionsBuilder.UseSqlite("Data Source=../EntityDataAccess/sep3db.db");

作为替代:
“主机=本地主机;端口=5432;数据库= sep 3db;用户名=postgres;密码=postgres;“我遇到了同样的问题,table不在那里,这就是为什么我决定尝试SQLite以及。
提前感谢您!
如果你有一些好的资源,请不要犹豫分享!
我是个菜鸟,所以如果我犯了一些明显的错误或者需要添加更多的东西来检测问题,只要对我有耐心:)

  • 我首先添加了迁移,然后更新
  • 刷新了数据库(我正在使用Rider的数据库工具)
  • 我尝试了在User模型类中使用和不使用构造函数
  • 删除了所有其他数据库集而不是用户
  • 用SQLite的数据库浏览器检查,表仍然不显示
bq9c1y66

bq9c1y661#

我后退一步,重新开始。从项目中删除了迁移和.db文件。
因此,在我再次进行迁移后,.db文件再次出现在项目中,我进入数据库工具并添加了新的源代码。在那里,我意识到在选择文件字段中,它不是项目中.db文件的路径。我认为这是错误的地方。

相关问题