Почему после выполнения миграций Entity Framework у меня есть только одна таблица? - PullRequest
1 голос
/ 13 июня 2019

У меня есть следующий набор моделей:

Пользователь:

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;
    }
}

Все модели здесь.

enter image description here

Когда я запускаю 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. enter image description here

Так что не так? Я новичок в 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>();
    }

1 Ответ

3 голосов
/ 13 июня 2019

Вы добавили набор User в свой DbContext.

public DbSet<User> Users { get; set; }

Вы не добавили набор Recipe.Вот почему у вас есть миграция для User, а не Recipe.Добавьте один для рецепта, а затем либо восстановите миграцию, отменив и воссоздав ее, либо добавьте другой, чтобы объединить изменения.

public DbSet<Recipe> Recipes { get; set; }

Примечание.добавление DbSet<> к DbContext, но это требует установки сущности в OnModelCreating.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...