0

我知道如何使用实体框架进行更新、插入和删除,但在这种情况下我不知道该怎么做。

在这种情况下,我有 3 个表:表 A、表 B 和表 AB,它有 2 列,一个是表 A 的外键,一个是表 B 的外键。

实体框架仅显示表 A 和 B,那么我如何仅更新表 AB 的内容?

我尝试使用实体 A 和实体 B 中的引用,但它给了我一个例外,说实体集 AB 没有插入功能和删除功能。

4

4 回答 4

0

我已经解决了这个问题,问题是我正在使用未附加到数据库的对象,我尝试过这样的附加

        foreach (DefAbilitazioni abilitazione in abilitazioni)
        {   
            entities.Attach(abilitazione);
            gruppo.DefAbilitazionis.Add(abilitazione);   
        }

但它不起作用它说entitykey为空,也许如果有人给我一个使用附件的例子,我会尝试改变我现在这样的代码

    public void ModificaAbilitazioni(int IdGruppoAnagrafica, List<DefAbilitazioni> AbilitazioniList)
    {            
        GruppiAnag gruppo = (from g in entities.GruppiAnags
                             where g.IdGruppoAnag == IdGruppoAnagrafica
                             select g).First();

        IEnumerable<int> idAbilitazioni = from id in AbilitazioniList
                                          select id.IdAbilitazione;

        List<DefAbilitazioni> abilitazioni = (from abilitazione in entities.DefAbilitazionis
                                              where idAbilitazioni.Contains(abilitazione.IdAbilitazione)
                                              select abilitazione).ToList();

        gruppo.DefAbilitazionis.Clear();
        foreach (DefAbilitazioni abilitazione in abilitazioni)
        {   
            gruppo.DefAbilitazionis.Add(abilitazione);   
        }
        entities.SaveChanges();
    }      
于 2012-04-16T08:02:48.297 回答
0

你试着做一个

Public Virtual List<int> Ids

在您的“A”和“B”类中恢复所有关联

于 2012-04-13T14:47:36.250 回答
0

对于插入,您将为表 A 创建一条记录,然后将表 B 记录添加到创建的插入 A 的项目中。EF 将处理其余部分。

 var tableA = new TableAtype { Description = "blah", etc.};
 tableA.TableBtype.Add(new TableBtype { Property1 = "foo", Property2 = "bar"};


 yourContext.AddToTableAtype(tableA);
 yourContext.SaveChanges();
于 2012-04-13T14:49:51.837 回答
0

根据 TheGeekYouNeed 的要求,我将更具体地使用我的项目代码

    public void ModificaAbilitazioni(int IdGruppoAnagrafica, List<DefAbilitazioni> AbilitazioniList)
    {            
        GruppiAnag gruppo = (from g in entities.GruppiAnags
                             where g.IdGruppoAnag == IdGruppoAnagrafica
                             select g).First();

        List<DefAbilitazioni> tutteAbilitazioni = GetTutteAbilitazioni();
        for (int i = 0; i < AbilitazioniList.Count; i++)
        {
            if (tutteAbilitazioni[i].GruppiAnags.Contains(gruppo))
            {
                tutteAbilitazioni[i].GruppiAnags.Remove(gruppo);
            }
        }

        foreach (DefAbilitazioni abilitazione in AbilitazioniList)
        {
            for (int i = 0; i < tutteAbilitazioni.Count; i++)
            {
                if (tutteAbilitazioni[i].IdAbilitazione == abilitazione.IdAbilitazione)
                {
                    tutteAbilitazioni[i].GruppiAnags.Add(gruppo);
                }
            }
        }
        entities.SaveChanges();
    } 

好的...在这里

此方法应更改特权帐户。

首先,我使用他的 id 恢复帐户,然后恢复所有特权,如果在他们的参考中他们恢复了帐户,那么我将其从参考中删除。这样该帐户就没有任何特权。现在,在我通过调用该方法的特权中,并在参考资料中我输入了帐户。(只是擦拭和补充,我现在只是在尝试......)

我也相反,擦除帐户中的特权引用并重新填充它们,但两种方式都行不通,在第一种情况下,它说第三实体(AB)没有插入功能

于 2012-04-15T14:52:12.760 回答