• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem dodawania za każdym razem tych samych danych do bazy

VPS Starter Arubacloud
0 głosów
143 wizyt
pytanie zadane 25 sierpnia 2019 w C# przez Moras Obywatel (1,620 p.)

Cześć tworze sobie stronę w ASP.Net Mvc, ale mam problem z inicjalizacją danych. Chcę by dane były wprowadzone tylko przy pierwszym uruchomieniu programu. Myślałem, że dobrze to zrobiłem,ale te same dane są dodawane przy każdym uruchomieniu. Bazę zrobiłem w CodeFirst.

Tutaj mój Context:

namespace StoreProject.DAL
{
    using StoreProject.Models;
    using System;
    using System.Data.Entity;
    using System.Linq;

    public class StoreContext : DbContext
    {
        // Your context has been configured to use a 'StoreContext' connection string from your application's 
        // configuration file (App.config or Web.config). By default, this connection string targets the 
        // 'StoreProject.DAL.StoreContext' database on your LocalDb instance. 
        // 
        // If you wish to target a different database and/or database provider, modify the 'StoreContext' 
        // connection string in the application configuration file.
        public StoreContext()
            : base("name=StoreDb")
        {
        }
        static StoreContext()
        {
            Database.SetInitializer<StoreContext>(new StoreInitializer());
        }

        // Add a DbSet for each entity type that you want to include in your model. For more information 
        // on configuring and using a Code First model, see http://go.microsoft.com/fwlink/?LinkId=390109.

         public virtual DbSet<Product> Products { get; set; }
    }

    //public class MyEntity
    //{
    //    public int Id { get; set; }
    //    public string Name { get; set; }
    //}
}

Initializer:

using StoreProject.Models;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using System.Web;
using StoreProject.Migrations;

namespace StoreProject.DAL
{
    public class StoreInitializer : MigrateDatabaseToLatestVersion<StoreContext, Configuration>
    {
        public static void SeedStoreData(StoreContext context)
        {
            var products = new List<Product>
            {
                new Product(){Name = "Czekolada biała",Price = 2.20f, Country = "Madagaskar"},
                new Product(){Name = "CzekoladaCzarna", Price=3.30f, Country = "Belgia"}
               
            };
            products.ForEach(a => context.Products.AddOrUpdate(a));
          
            context.SaveChanges();
        }
    }
}

Configuration w Migrations:

using StoreProject.DAL;

namespace StoreProject.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    public sealed class Configuration : DbMigrationsConfiguration<StoreProject.DAL.StoreContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
            ContextKey = "StoreProject.DAL.StoreContext";
        }

        protected override void Seed(StoreProject.DAL.StoreContext context)
        {
            StoreInitializer.SeedStoreData(context);
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data.
        }
    }
}

 

komentarz 26 sierpnia 2019 przez piotrsz109 Stary wyjadacz (13,730 p.)
Możesz podawać dane w metodzie Seed w Configuration, zostaną one dodane jedynie po wysłaniu migracji bazy danych.
komentarz 26 sierpnia 2019 przez Moras Obywatel (1,620 p.)

To nic nie dało. Dalej te same dane są dodawane sad

komentarz 26 sierpnia 2019 przez Moras Obywatel (1,620 p.)
Nie no to jest jakieś beznadziejne. Nie lepiej zrobić nową migracje i w niej dodać sql-em nowe wiersze w tabeli?
komentarz 26 sierpnia 2019 przez Moras Obywatel (1,620 p.)

@piotrsz109, Bo jak jak wprowadzę te dane do inicjalizatora robie 'add-migration' i gdy sie zrobi nic tam nie ma, a powinno byc wstawienie nowych danych

komentarz 26 sierpnia 2019 przez piotrsz109 Stary wyjadacz (13,730 p.)
Musisz wydałeś polecenie, update-database? Po za tym są pewne ustawienia odnośnie usuwania danych podczas aktualizacji struktury bazy danych

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 201 wizyt
0 głosów
0 odpowiedzi 154 wizyt
pytanie zadane 15 czerwca 2018 w C# przez HDRGXS Początkujący (470 p.)
0 głosów
1 odpowiedź 125 wizyt
pytanie zadane 25 sierpnia 2019 w C# przez Moras Obywatel (1,620 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...