[英]Entity Framework core many to many insert in navigation properties failed?
我從ef core開始-首先編寫代碼,我有一個簡單的asp.net控制台應用程序im,其中有3個表和1個連接表,用於多對多關系。 這是表格的樣子:
public class Kupac
{
public int Id { get; set; }
public String Ime { get; set; }
public String Prezime { get; set; }
public List<Racun> Racuni { get; set; }
}
public class Proizvod
{
public int Id { get; set; }
public String Naziv { get; set; }
public float Cijena { get; set; }
public List<ProizvodRacun> ProizvodRacun { get; set; }
}
public class ProizvodRacun
{
public int ProizvodId { get; set; }
public Proizvod Proizvod { get; set; }
public int RacunId { get; set; }
public Racun Racun { get; set; }
public int Kolicina { get; set; }
}
public class Racun
{
public int Id { get; set; }
public List<ProizvodRacun> ProizvodRacun { get; set; }
public int? KupacId {get; set;}
public Kupac Kupac { get; set; }
public bool Active { get; set; }
}
我知道我應該使用ICollection而不是List,但是我認為現在這不是問題。 我在表“ Kupac(客戶)”和“ Proizvod(產品)”中有一些數據。 當我嘗試在此聯接表中添加某些內容時-“ ProizvodRacun”,我使用以下代碼:
using (MyContext context = new MyContext())
{
Kupac kupacc = context.Kupci.SingleOrDefault(k => k.Id == 2);
Proizvod proizvod = context.Proizvodi.SingleOrDefault(p => p.Id == 5);
Racun racun = new Racun();
racun.Kupac = kupacc;
ProizvodRacun proizvodRacun = new ProizvodRacun();
proizvodRacun.Proizvod = proizvod;
proizvodRacun.Racun = racun;
proizvodRacun.Kolicina = 5;
context.Add(proizvodRacun);
context.SaveChanges();
}
這有效! 但是當我嘗試以其他方式做同樣的事情時,不會添加導航屬性,但是會記錄表中的記錄! 另一種方式是這樣的:
Racun racun = null;
Kupac tempKupac = null;
ProizvodRacun proizvodRacun = new ProizvodRacun();
tempKupac = context.Kupci.SingleOrDefault(k => k.Id == kupac.Id);
if (tempKupac != null)
{
if (tempKupac.Racuni != null)
{
racun = context.Racuni.SingleOrDefault(r => r.Active == true);
if (racun != null)
{
proizvodRacun.Racun = racun;
context.Add(proizvodRacun);
context.SaveChanges();
}
else
{
racun = new Racun();
racun.Active = true;
racun.Kupac = tempKupac;
racun.ProizvodRacun = new List<ProizvodRacun>();
proizvodRacun.Racun = racun;
context.Add(proizvodRacun);
context.SaveChanges();
}
}
else
{
//FIRST TIME THIS CODE GET EXECUTED SO JUST WATCH THIS CASE
racun = new Racun();
racun.Kupac = tempKupac;
proizvodRacun.Proizvod = context.Proizvodi.SingleOrDefault(p => p.Id == products[i].Id);
proizvodRacun.Kolicina = j;// j -> option from code above that can't be seen...
proizvodRacun.Racun = racun;
context.Add(proizvodRacun);
context.SaveChanges();
}
}
else
{
Console.WriteLine("Customer doesn't exist!");
}
請幫我 ...
好的,我發現了問題,查詢“ Kupac”時必須使用.Include()
來包含其“ Racun”。 “ Racun”始終在那里,只是沒有加載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.