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

Program z połączeniem się z bazą ASP.NET

Object Storage Arubacloud
0 głosów
311 wizyt
pytanie zadane 30 maja 2017 w C i C++ przez Dominik Kulis Użytkownik (720 p.)

W explorer serwer dodałem nazwe serwera (localDB)\MSQLLocalDB a jako nazwe bazy Dbfirst. Tworze kontroler

namespace Projekt_z_baz_danych_1._0._0.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult AddCustomer(Customer customer)
        {
            if (!ModelState.IsValid)
                return View("Index", customer);
            else
            {
                CustomerContext db = new CustomerContext();
                db.Customers.Add(customer);
                db.SaveChanges();
                return View("Index");
            }
        }

        public ActionResult ShowCustomer(int customerID)
        {
            CustomerContext db = new CustomerContext();
            var customer = db.Customers.Find(customerID);
            return View(customer);
        }
    }
}

Tworze kontekst

namespace Projekt_z_baz_danych_1._0._0.DAL
{
    public class CustomerContext : DbContext
    {
        public CustomerContext()
            : base("CustomerConnecionString")
        {

        }

        public DbSet<Customer> Customers { get; set; }
    }


}

Dodatkowo tworze inizjalizer (który wywołuje w Global,asax) i model widoku

namespace Projekt_z_baz_danych_1._0._0.DAL
{
    public class CustomerInitializer : DropCreateDatabaseAlways<CustomerContext>
    {
        protected override void Seed(CustomerContext context)
        {
            var customers = new List<Customer>
            {
                new Customer() { customerID = 1 ,name = "xxx", address = "ul. Meissnera 6/57 Krakow", status = "Gracz"},
                new Customer() { customerID = 2, name = "yyy", address = "ul. Lipinskiego 4/7 Krakow", status = "Gracz"}
            };

            customers.ForEach(c => context.Customers.Add(c));
            context.SaveChanges();
        }
    }
}

A mój co connectionStrings wygląda tak:

  <connectionStrings>
    <add name="CustomerConnecionString"
        connectionString="Data Source=(localDB)\MSSQLLocalDB;Initial Catalog=Dbfirst;Integrated Security=True"
        providerName="System.Data.SqlClient" />
  </connectionStrings>

Klasa Customer:

namespace Projekt_z_baz_danych_1._0._0.Models
{
    public class Customer : IValidatableObject
    {
        [Key]
        [ScaffoldColumn(false)]
        public int customerID { get; set; }

        [Display(Name = "Imie Nazwisko")]
        public string name { get; set; }

        [Display(Name = "Address")]
        public string address { get; set; }

        [Display(Name = "Status")]
        public string status { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            throw new NotImplementedException();
        }
    }
}

Gdy zaglądam do explorera bazy jest ona pusta(gdy uruchamiam widok wyświetlają się błędy). Nie wiem czy źle się łączę z tą bazą czy źle wysyłam dane. Jest w stanie ktoś mi pomóc gdzie może leżeć problem?

2 odpowiedzi

+1 głos
odpowiedź 30 maja 2017 przez dobrydiler Użytkownik (650 p.)
wybrane 31 maja 2017 przez Dominik Kulis
 
Najlepsza
Wykonałeś migracje i zaktualizowałeś bazę danych ?
komentarz 31 maja 2017 przez Dominik Kulis Użytkownik (720 p.)
edycja 31 maja 2017 przez Dominik Kulis
Z tego co zrozumiałem migrację dokonuje się, gdy chcemy zmienić naszą bazę danych. A mi się w ogóle nie tworzy żadna tabela.

 

Edit. Tak tutaj leżał cały problem. Dzięki za pomoc :D

Dla osób które bedą miały podobny problem w Konsoli menadżera pakietów należy wpisać: enable-migrations, Add-Migration nazwa, Update-Database
komentarz 1 czerwca 2017 przez dobrydiler Użytkownik (650 p.)
Nie wiem jakiej wersji ASP.Net używasz ale jak używasz Core to jest poradnik https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db
+1 głos
odpowiedź 31 maja 2017 przez maciej.tokarz Nałogowiec (27,280 p.)

Dodaj do kontekstu (CustomerContext) taki kod:

public override int SaveChanges()
        {
            try
            {
                return base.SaveChanges();
            }
            catch (DbEntityValidationException ex)
            {
                var errorMessages = new StringBuilder();

                foreach (var entityValidationError in ex.EntityValidationErrors)
                {
                    var entityName = entityValidationError.Entry.Entity.GetType().Name;

                    foreach (var validationError in entityValidationError.ValidationErrors)
                        errorMessages.AppendFormat(
                            "{0}.{1}: {2}\n",
                            entityName,
                            validationError.PropertyName,
                            validationError.ErrorMessage);
                }

                throw new DbEntityValidationException(errorMessages.ToString(), ex.EntityValidationErrors);
            }
        }

Następnie zastosuj: Update-Database -ProjectName "MyProject.Data" -Force w PM. Ten Seed nie musi być wołany przy każdym uruchamianiu aplikacji, wykonuje się to raz przy tworzeniu bazy (Update-Database). Spróbuj utworzyć osobny projekt Class Library (np. MyProject.Data) i dodaj tam miejsce na Twoje obiekty oraz DbContext np. MyProject.Data\Model. Dodatkowo umieść klasę:

using System.Data.Entity.Migrations;
using MyProject.Data.Model;

namespace MyProject.Data
{
    internal sealed class Configuration : DbMigrationsConfiguration<DataContext>
    {
        // Update-Database
        // Update-Database -ProjectName "MyProject.Data" -Force
        // Update-Database -Verbose

        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
        }

        protected override void Seed(DataContext context)
        {
        }
    }
}

Do Twojego projektu ASP dodaj referencję do MyProject.Data i zbuduj kontrolery. Naturalnie można inaczej ponazywać sam projekt i klasy oraz zastosować różne przestrzenie - jak kto lubi.

M.

 

Podobne pytania

0 głosów
1 odpowiedź 294 wizyt
pytanie zadane 11 czerwca 2017 w C# przez Krzysztof Rak Bywalec (2,420 p.)
+1 głos
1 odpowiedź 102 wizyt
pytanie zadane 22 kwietnia 2017 w C# przez Deloryn Bywalec (2,060 p.)
0 głosów
1 odpowiedź 114 wizyt
pytanie zadane 7 października 2020 w C# przez OlekS Początkujący (280 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...