First solve:
db.KreatoryZamowien.Add(model.KreatorZamowien);
db.Nabywcy.Add(model.Nabywca);
db.SaveChanges();
That is adding data to two tables. How Can I add related IDs to junction table (NabywcaKreatorzamowien)?
****************** Question: *************** I have created related tables, figured out how to display that data in my View. (jejejej) Now when I'm trying to save that data to database I'm getting exception.
Exception:
System.NullReferenceException occurred
HResult=0x80004003
Message=The object reference has not been set to the instance of the object.
Source=<Cannot evaluate the exception source>
StackTrace:
at Panele.Controllers.KreatorZamowienController.Create(KreatorZamowienNabywca model) in C:\Users\bplos\Source\Repos\Panele\Panele\Controllers\KreatorZamowienController.cs:line 81
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
Exception appears in controller in line within:
emp.KreatorZamowien.NumerZamowienia = model.KreatorZamowien.NumerZamowienia;
I don't know why, cos it gets value from model and is assigning to object.:(
My database schema:
KreatorZamowien(Id, NumerZamowienia) -------------------------------|
|
NabywcaKreatorzamowien (KreatorZamowien_Id, Nabywca_Nabywca_Id)------|
|
Nabywca(Nabywca_Id, Nazwa) ------------------------------------------|
My models:
KreatorZamowien.cs
public class KreatorZamowien
{
public int Id { get; set; }
public int NumerZamowienia { get; set; }
public virtual ICollection<Nabywca> Nabywcy { get; set; }
}
Nabywca.cs
public class Nabywca
{
public int NabywcaId { get; set; }
public string Nazwa { get; set; }
public virtual ICollection<KreatorZamowien> KreatoryZamowien { get; set; }
}
Model containing 2 models to display them in View: KreatoryZamowienNabywca.cs
public class KreatorZamowienNabywca
{
public KreatorZamowien KreatorZamowien { get; set; }
public Nabywca Nabywca { get; set; }
}
My Create.chtml View:
@model Panele.Models.KreatorZamowienNabywca
@using (Ajax.BeginForm("Create", "KreatorZamowien", new AjaxOptions { HttpMethod = "POST", LoadingElementId = "loader", OnSuccess = "onAjaxRequestSuccess" }, new
{
@id = "AjaxformId",
@class = "form-horizontal",
role = "form"
}))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.DisplayNameFor(m => m.KreatorZamowien.NumerZamowienia)
@Html.TextBoxFor(m => m.KreatorZamowien.NumerZamowienia)
@Html.DisplayNameFor(m => m.Nabywca.Nazwa)
@Html.TextBoxFor(m => m.Nabywca.Nazwa)
<input id="btnSubmit" class="ico2" type="submit" value="Zapisz zamówienie" form="AjaxformId" />
}
KreatorZamowienController.cs
public class KreatorZamowienController : Controller
{
private ShopContext db = new ShopContext();
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Create(KreatorZamowienNabywca model)
{
try
{
// Verification
if (ModelState.IsValid)
{
ShopContext db = new ShopContext();
KreatorZamowienNabywca emp = new KreatorZamowienNabywca();
emp.KreatorZamowien.NumerZamowienia = model.KreatorZamowien.NumerZamowienia;
emp.Nabywca.Nazwa = nabywca.Nazwa;
db.KreatoryZamowien.Add(emp.KreatorZamowien);
db.Nabywcy.Add(emp.Nabywca);
db.SaveChanges();
// Info.
return this.Json(new
{
EnableSuccess = true,
SuccessTitle = "Success",
SuccessMsg = "Zapisano zamówienie o numerze: " + model.KreatorZamowien.NumerZamowienia + "."
});
}
}
catch (Exception ex)
{
// Info
Console.Write(ex);
throw ex;
}
// Info
return this.Json(new
{
EnableError = true,
ErrorTitle = "Error",
ErrorMsg = "Coś poszło nie tak! Sprawdź formularz."
});
//return View(model);
}
User contributions licensed under CC BY-SA 3.0