У меня есть следующий набор моделей:
Пользователь:
public class User
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public string SocialId { get; set; }
public string AccessToken { get; set; }
public string RefreshToken { get; set; }
public DateTime ExpirationAccess { get; set; }
public DateTime ExpirationRefresh { get; set; }
public string AuthType { get; set; }
public decimal Money { get; set; }
public User()
{
CreatedAt = DateTime.UtcNow;
UpdatedAt = DateTime.UtcNow;
AccessToken = Guid.NewGuid().ToString();
RefreshToken = Guid.NewGuid().ToString();
ExpirationAccess = DateTime.UtcNow.AddDays(1);
ExpirationRefresh = DateTime.UtcNow.AddMonths(1);
}
}
Рецепты:
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 migrations add InitialMigration
, у меня есть миграция для создания только одной таблицы Users
. Вот текст сгенерированной миграции:
public partial class InitialMigration : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Users",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn),
Name = table.Column<string>(nullable: true),
CreatedAt = table.Column<DateTime>(nullable: false),
UpdatedAt = table.Column<DateTime>(nullable: false),
SocialId = table.Column<string>(nullable: true),
AccessToken = table.Column<string>(nullable: true),
RefreshToken = table.Column<string>(nullable: true),
ExpirationAccess = table.Column<DateTime>(nullable: false),
ExpirationRefresh = table.Column<DateTime>(nullable: false),
AuthType = table.Column<string>(nullable: true),
Money = table.Column<decimal>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Users", x => x.Id);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Users");
}
}
Это выглядит как миграция только для Users
таблицы. Но где остальные? И когда я запускаю dotnet ef database update
, у меня есть только одна таблица Users
.
Так что не так? Я новичок в EF, и, возможно, я не понимаю, как это работает. Можете ли вы описать мне, как генерировать все таблицы из моих моделей?
P.S.
Платформа .Net Core 2.2.300. Тип проекта - веб-API. База данных - 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);
}
}
Я ввел его через стандартную систему DI
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddEntityFrameworkNpgsql()
.AddDbContext<ApplicationContext>()
.BuildServiceProvider();
services.AddSingleton<IAuthService, AuthService>();
}