Каково поведение структуры сущностей, когда таблица еще не существует для сущности? - PullRequest
0 голосов
/ 05 ноября 2018

Мы работаем с несколькими людьми в программной среде. И поэтому мы считаем удобным работать параллельно. Таким образом, код C # для сущности добавляется во время создания определения таблицы (подход db first).

Мой вопрос заключается в том, можно ли добавить этот MyEntity и DbSet уже к коду C # в контексте, без исключений EF, потому что таблицы БД еще нет в базе данных. Это позволит продолжить разработку кода на C # (создание хранилища, провайдера, валидации и т. Д.). Конечно, при условии, что DbSet не используется в коде C #.

Так хорошо ли EF, когда DbSet является частью контекста, а таблица для MyEntity еще не существует в базе данных?

1 Ответ

0 голосов
/ 05 ноября 2018

Да, вы можете добавить объект в контекст, не имея таблицы. Я проверил это с помощью тестового проекта. Смотрите код ниже. Он подключается к существующей БД на локальной машине. Контекст создается без каких-либо проблем. Вы даже можете использовать свойство Entities, добавить сущность и SaveChanges(). Это создаст таблицу для вас в первый раз. Во второй раз, когда таблица отсутствует (например, она была удалена вручную после создания), она выдаст исключение.

Будет сгенерировано исключение, потому что он хранит записи о состоянии базы данных в __MigrationHistory.

    using System.Data.Entity;

namespace EntityFrameWorkMissingTableTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new MyContext("Data Source=localhost;Initial Catalog=MyContext;Integrated Security=True"))
            {
                context.Entities.Add(new Entity());
                context.SaveChanges();
            }
        }

        public class MyContext : DbContext
        {
            public MyContext(string connectionString)
                : base(connectionString)
            {

            }

            public DbSet<Entity> Entities { get; set; }
        }

        public class Entity
        {
            public int Id { get; set; }
        }
    }
}
...