C# 为什么运行实体框架迁移后只有一个表?
我有以下一套模型: 用户: 食谱:C# 为什么运行实体框架迁移后只有一个表?,c#,entity-framework-6,C#,Entity Framework 6,我有以下一套模型: 用户: 食谱: public class Recipe { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public string Name { get; set; } public User Author { get; set; } public int LikesCount { get; set; }
public class Recipe
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public User Author { get; set; }
public int LikesCount { get; set; }
public int DislikesCount { get; set; }
public int Time { get; set; }
public ICollection<Ingridient> Ingridients { get; set; }
public ICollection<RecipeStep> Steps { get; set; }
public Category Category { get; set; }
public int ServingsCount { get; set; }
public int Image { get; set; }
public decimal Price { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public Recipe()
{
CreatedAt = DateTime.UtcNow;
UpdatedAt = DateTime.UtcNow;
}
}
它看起来像是仅针对用户的迁移
表。但是其他的呢?当我运行dotnet ef数据库更新时
我只有一个表Users
。
那怎么了?我是EF的新手,也许我不明白它是如何工作的。你能描述一下如何从我的模型中生成所有表吗
附言。
该平台是.NETCore2.2.300。项目类型是WebAPI。数据库是PostgreSQL
更新
我的数据库上下文是
public class ApplicationContext : DbContext
{
private readonly string _connectionString;
public ApplicationContext(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("Recipes");
}
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(_connectionString);
}
}
公共类应用程序上下文:DbContext
{
私有只读字符串_connectionString;
公共应用程序上下文(IConfiguration配置)
{
_connectionString=configuration.GetConnectionString(“配方”);
}
公共数据库集用户{get;set;}
配置时受保护的覆盖无效(DBContextOptions Builder Options Builder)
{
optionsBuilder.UseNpgsql(_connectionString);
}
}
我已经通过标准DI系统注入了它
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddEntityFrameworkNpgsql()
.AddDbContext<ApplicationContext>()
.BuildServiceProvider();
services.AddSingleton<IAuthService, AuthService>();
}
public void配置服务(IServiceCollection服务)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddEntityFrameworkNpgsql()
.AddDbContext()
.BuildServiceProvider();
services.AddSingleton();
}
您已将一组用户
添加到数据库上下文中
public DbSet<User> Users { get; set; }
注意:您可以在不将
DbSet
添加到DbContext
的情况下映射和迁移实体,但这涉及到在OnModelCreating
中设置实体 您是否已将其他模型类添加到DBContext?显示您的上下文类。我已在答案中添加了我的db上下文。但我不明白我该在哪里使用它?我以前在服务和简单控制器中使用过它。为了让EF创建表,您必须将它们作为数据库集添加到上下文中。否则EF不知道这些类应该在database.Ohhhh中。谢谢)我只是忘记了)它有效,我可以看到所有有关系的桌子)再次谢谢)
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddEntityFrameworkNpgsql()
.AddDbContext<ApplicationContext>()
.BuildServiceProvider();
services.AddSingleton<IAuthService, AuthService>();
}
public DbSet<User> Users { get; set; }
public DbSet<Recipe> Recipes { get; set; }