MVC Core 2.1 błąd przy próbie wstawienia danych do bazy

0

Witam, mam problem przy zapisaniu zmian w bazie.

Mam interfejs:

public interface IOrderRepository
    {
        IQueryable<Order> Orders { get; }
        void SaveOrder(Order order);
    }

Klasa implementująca:

public class EFOrderRepository : IOrderRepository
    {
        private readonly ApplicationDbContext context;

        public EFOrderRepository(ApplicationDbContext context)
        {
            this.context = context;
        }

        public IQueryable<Order> Orders => context.Orders
            .Include(o => o.Lines)
            .ThenInclude(l => l.Product);

        public void SaveOrder(Order order)
        {
            context.AttachRange(order.Lines.Select(l => l.Product));
            if (order.OrderId == 0)
            {
                context.Orders.Add(order);
            }
            context.SaveChanges();
        }
    }

W widoku mam prosty formularz, w kontrollerze przekazuję obiekt i odpalam metodę SaveOrder

[HttpPost]
        public IActionResult Checkout(Order order)
        {
            if (cart.Lines.Count() == 0)
            {
                ModelState.AddModelError("", "Koszyk jest pusty");
            }

            if (ModelState.IsValid)
            {
                order.Lines = cart.Lines.ToArray();
                repository.SaveOrder(order);
                return RedirectToAction(nameof(Completed));
            } else
            {
                return View(order);
            }
        }

Teraz przy próbie użycia SaveChanges() wyrzuca błąd:

Microsoft.EntityFrameworkCore.DbUpdateException
HResult=0x80131500
Message=An error occurred while updating the entries. See the inner exception for details.
Source=Microsoft.EntityFrameworkCore.Relational
Stack trace:
at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection)
at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(DbContext _, ValueTuple2 parameters) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable1 commandBatches, IRelationalConnection connection)
at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IReadOnlyList1 entries) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList1 entriesToSave)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)
at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
at Microsoft.EntityFrameworkCore.DbContext.SaveChanges()
at SportsStore.Models.EFOrderRepository.SaveOrder(Order order) in C:\Users\Papryk\source\repos\SportsStore\SportsStore\Models\EFOrderRepository.cs:line 30
at SportsStore.Controllers.OrderController.Checkout(Order order) in C:\Users\Papryk\source\repos\SportsStore\SportsStore\Controllers\OrderController.cs:line 34
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__12.MoveNext()
Outer exception 1:
SqlException: Invalid object name 'Orders'.

Jeszcze model Order.cs:

public class Order
    {
        [BindNever]
        public int OrderId { get; set; }
        [BindNever]
        public ICollection<CartLine> Lines { get; set; }

        [Required(ErrorMessage = "Proszę podać imię i nazwisko.")]
        public string Name { get; set; }

        [Required(ErrorMessage = "Proszę podać pierwszy wiersz adresu.")]        
        public string Line1 { get; set; }
        public string Line2 { get; set; }
        public string Line3 { get; set; }

        [Required(ErrorMessage = "Proszę podać nazwę miasta.")]
        public string City { get; set; }

        [Required(ErrorMessage = "Prosze podać nazwę województwa.")]
        public string State { get; set; }

        public string Zip { get; set; }

        [Required(ErrorMessage = "Proszę podać nazwę miasta.")]
        public string Country { get; set; }

        public bool GiftWrap { get; set; }
    }

Pomógłby ktoś nakierować co jest nie tak?

1
SqlException: Invalid object name 'Orders'.

Ten błąd sugeruje, że nie masz tabeli orders w bazie.

0
john_klamka napisał(a):
SqlException: Invalid object name 'Orders'.

Ten błąd sugeruje, że nie masz tabeli orders w bazie.

Racja zrobiłem migrację ale tabeli nie dodało, musiałem usunąć i na nowo utworzyć, a że to testowa aplikacja to nie ma z tym problemu. Przeoczyłem to, dzięki

1

screenshot-20181106024751.png

To MVC w tytule to musi być jakiś błąd, bo żadnego MVC tu nie ma. Repository zresztą też nie.

0

No ja ostatnio byłem nazywany i to różnie byłem nazywany. Dlatego że zrobiłem strategie w warstwie webowej. Według mojego byłego kolegi metody jak DeliveryScheduled w serwisie nie mają sensu dla restowego API. Strategia w webie to w ogóle zbrodnia, przecież w żadnej książce tak nie pokazują ani w tutorialach, tak nikt nie robi. Do restowego API najlepsza jest encji na twarz. Pozdro garbaty...

1 użytkowników online, w tym zalogowanych: 0, gości: 1