我知道如何使用实体框架进行更新、插入和删除,但在这种情况下我不知道该怎么做。
在这种情况下,我有 3 个表:表 A、表 B 和表 AB,它有 2 列,一个是表 A 的外键,一个是表 B 的外键。
实体框架仅显示表 A 和 B,那么我如何仅更新表 AB 的内容?
我尝试使用实体 A 和实体 B 中的引用,但它给了我一个例外,说实体集 AB 没有插入功能和删除功能。
我知道如何使用实体框架进行更新、插入和删除,但在这种情况下我不知道该怎么做。
在这种情况下,我有 3 个表:表 A、表 B 和表 AB,它有 2 列,一个是表 A 的外键,一个是表 B 的外键。
实体框架仅显示表 A 和 B,那么我如何仅更新表 AB 的内容?
我尝试使用实体 A 和实体 B 中的引用,但它给了我一个例外,说实体集 AB 没有插入功能和删除功能。
我已经解决了这个问题,问题是我正在使用未附加到数据库的对象,我尝试过这样的附加
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();
}
你试着做一个
Public Virtual List<int> Ids
在您的“A”和“B”类中恢复所有关联
对于插入,您将为表 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();
根据 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)没有插入功能