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, Func
3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable
1 commandBatches, IRelationalConnection connection)
at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IReadOnlyList1 entries) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList
1 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?