Witam serdecznie,
W modelu mam 3 tabele w relacji wiele do wiele
```
public class Zlecenia
{
[Key]
//Relacja z tabelą ZleceniaZalaczniki.
public int IdZlecenia { get; set; }
public string UserId { get; set; }
public virtual Uzytkownik User { get; set; }
public int IdZlecenieZalacznik { get; set; }
public virtual ZleceniaZalaczniki ZleceniaZalaczniki { get; set; }
public virtual ICollection<Pracownik> Pracownik { get; set; }
[Required(ErrorMessage = "Podaj datę przyjecia zlecenia")]
[Display(Name = "Data przyjęcia zlecenia")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime DataPrzyjeciaZlecenia { get; set; }
[Display(Name = "Data planowania zakończenia")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? DataPlanowaniaZakonczenia { get; set; }
[Display(Name = "Data zakończenia")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? DataZakonczenia { get; set; }
[Required(ErrorMessage = "Wpisz temat")]
[MaxLength(200, ErrorMessage = "Nazwa powinna zawierać max 200 znaków")]
[Display(Name = "Temat")]
public string Temat { get; set; }
public string NazwaStanowiska { get; set; }
// Relacja z tabelą Usługi
[Required(ErrorMessage = "Wybierz usługę")]
public int IdUslugi { get; set; }
public virtual Uslugi Uslugi { get; set; }
// Relacja z tabelą Zlecenia
public int IdStatusZlecenia { get; set; }
public virtual StatusZlecenia StatusZlecenia { get; set; }
public virtual ICollection<ZleceniaLacznikPozycje> ZleceniaLacznikPozycje { get; set; }
public class ZleceniaLacznikPozycje
{
[Key]
public int IdZleceniaLacznikPozycje { get; set; }
public int IdZlecenia { get; set; }
public int IdZleceniaPozycje { get; set; }
public virtual Zlecenia Zlecenia { get; set; }
public virtual ZleceniaPozycje ZleceniaPozycje { get; set; }
}
public class ZleceniaPozycje
{
[Key]
public int IdZleceniaPozycje { get; set; }
[Column(TypeName = "nvarchar(MAX)")]
[Display(Name = "Opis")]
[UIHint("tinymce_jquery_full"), AllowHtml]
public string Opis { get; set; }
public virtual ICollection<ZleceniaLacznikPozycje> ZleceniaLacznikPozycje { get; set; }
}
W kontrolerze w metodzie dodającej nowe zlecenie chce zapisać do bazy w powyższych tablicach dane. W zamyśle do każdego zlecenia będzie można dodać kilka postów - dlatego potrzebna jest relacja wiele do wiele
public ActionResult UtworzZlecenie()
{
DaneZleceniaUzytkownikaViewModel viewModels = new DaneZleceniaUzytkownikaViewModel();
ViewBag.Czas = DateTime.Now;
viewModels.DataPrzyjeciaZlecenia = DateTime.Now;
viewModels.UsługiSelectListItem = new SelectList(db.Uslugi.Where(x => x.CzyAktywny == true), "IdUslugi", "NazwaUslugi");
viewModels.StatusyZleceńSelectListItem = new SelectList(db.StatusZlecenia.Where(p => p.CzyAktywny == true && p.NazwaStatutuZlecenia == "Rejestracja"), "IdStatusZlecenia", "NazwaStatutuZlecenia");
return View(viewModels);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UtworzZlecenie(HttpPostedFileBase plik, DaneZleceniaUzytkownikaViewModel viewModel)
{
var userId = User.Identity.GetUserId();
// var znajdzUserId = db.Zlecenia.SingleOrDefault(i => i.UserId == userId);
viewModel.UsługiSelectListItem = new SelectList(db.Uslugi, "IdUslugi", "NazwaUslugi");
viewModel.StatusyZleceńSelectListItem = new SelectList(db.StatusZlecenia, "IdUslugi", "NazwaUslugi");
if (ModelState.IsValid)
{
if (plik != null && plik.ContentLength > 0)
{
string sciezka = "/Content/Layout/FirmaPliki";
if (!Directory.Exists(HttpContext.Server.MapPath(sciezka)))
{
Directory.CreateDirectory(HttpContext.Server.MapPath(sciezka));
}
string filename = Path.GetFileName(plik.FileName);
plik.SaveAs(Path.Combine(HttpContext.Server.MapPath(sciezka), filename));
viewModel.NazwaPliku = sciezka + "/" + filename;
//var nazwaPliku = Path.GetFileName(plik.FileName);
//var path = Path.Combine(Server.MapPath("/Content/Layout/FirmaPliki"), nazwaPliku);
//plik.SaveAs(path);
}
var zlecenie = new Zlecenia()
{
DataPrzyjeciaZlecenia = viewModel.DataPrzyjeciaZlecenia,
Temat = viewModel.Temat,
IdUslugi = viewModel.IdUslugi,
IdStatusZlecenia = viewModel.IdStatusZlecenia,
UserId = userId
};
var zleceniePozycje = new ZleceniaPozycje()
{
Opis = viewModel.Opis
};
var zlecenieZalacznik = new ZleceniaZalaczniki()
{
NazwaPliku = viewModel.NazwaPliku,
Opis = viewModel.Opis2
};
db.Zlecenia.Add(zlecenie);
db.ZleceniaPozycje.Add(zleceniePozycje);
db.ZleceniaZalaczniki.Add(zlecenieZalacznik);
db.SaveChanges();
}
return RedirectToAction("Index", "Administracja");
}
Moje pytanie jest w jaki sposób zapisywać dane do tablicy ZleceniaLacznikPozycje z kluczami obcymi.
Rozumiem że najpierw powinienem zapisywać dane w tablicy Zlecenia i ZleceniaPozycje.
Następnie mając dwa klucze z tych tablic powinienem je odczytać i przesyć do tablicy ZleceniaLacznikPozycje jako klucze obce gdzie zostaną zapisane.
Jak powinien wyglądać zapis takich instrukcji?