实体框架核心多少插入导航属性失败?

时间:2017-11-10 18:14:04

标签: c# asp.net entity-framework entity-framework-core

我从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!");
            }

请帮帮我......

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题,当我查询时,我不得不使用.Include()&#34; Kupac&#34; ,包括它的&#34; Racun&#34; s。 &#34; Racun&#34;它总是存在,只是它没有装载。