我从ef核心开始 - 代码优先,我有简单的asp.net控制台应用程序,我有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,但我现在认为这不是问题。表格中有一些数据&#34; Kupac(客户)&#34;和&#34; Proizvod(产品)&#34;。当我尝试在此联接表中添加内容时 - &#34; ProizvodRacun&#34;我使用这段代码:
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!");
}
请帮帮我......
答案 0 :(得分:0)
好的,我发现了问题,当我查询时,我不得不使用.Include()
&#34; Kupac&#34; ,包括它的&#34; Racun&#34; s。 &#34; Racun&#34;它总是存在,只是它没有装载。