Как использовать DBContext для постоянного сохранения данных в моей локальной sql БД? - PullRequest
1 голос
/ 22 января 2020


Я пытаюсь понять, почему мои данные не сохраняются в моем локальном SQL дБ, когда мое приложение закрыто.
Я запускаю простое консольное приложение, которое подключено к SQL server.

Вот моя строка подключения:

Data Source=(localdb)\mssqllocaldb;Initial Catalog=SwagAiDb;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

Я создал следующий класс:

    public partial class SwagAiDbContext : DbContext
    {
        public SwagAiDbContext()
        {
        }

        public SwagAiDbContext(DbContextOptions<SwagAiDbContext> options)
            : base(options)
        {
        }

        public virtual DbSet<Company> Company { get; set; }
        public virtual DbSet<IndustrySection> IndustrySection { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=SwagAiDb;Trusted_Connection=True;");
            }
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Company>(entity =>
            {
                entity.Property(e => e.CompanyName).IsRequired();

                entity.Property(e => e.Url).IsRequired();
            });

            modelBuilder.Entity<IndustrySection>(entity =>
            {
                entity.HasKey(e => e.IndustryCode)
                    .HasName("PK_IndustryCode");

                entity.Property(e => e.IndustryCode).ValueGeneratedNever();
            });

            OnModelCreatingPartial(modelBuilder);
        }

        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
    }

В моем коде Я просто вызываю следующие методы в качестве примера («Компания» - это таблица в моей БД). Позже я хотел бы заполнить мою БД фактическими данными, которые НЕ удаляются при закрытии моего приложения.

using (var db = new SwagAiDbContext())
{
    db.Company.Add(new Company{ [... adding the required parameters here...] });
    db.SaveChanges();
}

Данные добавляются в БД. Все выглядит хорошо. Но когда я перезапускаю свое приложение, БД пуста. Все таблицы существуют, но данные не найдены.

Пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Попробуйте использовать SubmitChanges() вместо SaveChanges();

0 голосов
/ 22 января 2020

проверьте, используете ли вы опцию инициализатора базы данных DropCreateDatabaseAlways.

РЕДАКТИРОВАТЬ : еще один вариант: переместить строку подключения в конфигурацию приложения

    <connectionStrings>
    <add name="SwagAiDbContext"  
    connectionString="data source=(localdb)\mssqllocaldb;Initial Catalog=SwagAiDb;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" 
    providerName="System.Data.SqlClient" />
    </connectionStrings>

и переписать dbcontext, как это:

    public SwagAiDbContext()
        : base("name=SwagAiDbContext")
    {
    }

    public virtual DbSet<Company> Company { get; set; }
    public virtual DbSet<IndustrySection> IndustrySection { get; set; }


    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Company>(entity =>
        {
            entity.Property(e => e.CompanyName).IsRequired();

            entity.Property(e => e.Url).IsRequired();
        });

        modelBuilder.Entity<IndustrySection>(entity =>
        {
            entity.HasKey(e => e.IndustryCode)
                .HasName("PK_IndustryCode");

            entity.Property(e => e.IndustryCode).ValueGeneratedNever();
        });

    }
...