update many to many entity framework error: Multiplicity constraint violated. The role 'x' of the relationship 'many_many_relation_ibfk_2' has multiplicity 1 or 0..1.
Jeg har nu prøvet at updatere en mange til mange men uden held har dette kode indtil videre...public static void OpdaterUdlejning(Udlejning u, Dictionary<string, bool> vu, List<ExtendedGasAntalVognIds> pu)
{
using (var context = new CampingForumEntities1())
{
Udlejning udl = context.Udlejnings.FirstOrDefault(d => d.UdlejningId == u.UdlejningId);//Old
//List<vogn_udlejning> vuList = udl.vogn_udlejning.ToList();
List<vogn_udlejning> newvuList = new List<vogn_udlejning>();
////List<produkt_udlejning> puList = udl.produkt_udlejning.ToList();
List<produkt_udlejning> newpuList = new List<produkt_udlejning>();
udl.produkt_udlejning.Clear();
udl.vogn_udlejning.Clear();
//foreach (vogn_udlejning vui in vuList)
//{
// //context.vogn_udlejning.Attach(vui);
// //context.vogn_udlejning.Remove(vui);
// ((IObjectContextAdapter)context).ObjectContext.Detach(vui);
// context.Entry(vui).State = System.Data.EntityState.Modified;
//}
//foreach (produkt_udlejning pui in puList)
//{
// //context.produkt_udlejning.Attach(pui);
// //context.produkt_udlejning.Remove(pui);
// ((IObjectContextAdapter)context).ObjectContext.Detach(pui);
// context.Entry(pui).State = System.Data.EntityState.Modified;
//}
if (u != null)
{
foreach (ExtendedGasAntalVognIds egavi in pu)
{
if (egavi.gasKg != "0")
u.produkt_udlejning.Add(new produkt_udlejning
{
Antal = egavi.antal,
produkt_id = context.Produkters.Where(g => g.Type == egavi.gasKg && g.CategoryId == 1).FirstOrDefault().id,
Produkter = context.Produkters.Where(g => g.Type == egavi.gasKg && g.CategoryId == 1).FirstOrDefault(),
udlejning_id = u.UdlejningId,
Udlejning = u,
VognIds = egavi.vognIds
});
//context.produkt_udlejning.Attach(new produkt_udlejning
//{
// Antal = egavi.antal,
// produkt_id = context.Produkters.Where(g => g.Type == egavi.gasKg && g.CategoryId == 1).FirstOrDefault().id,
// Produkter = context.Produkters.Where(g => g.Type == egavi.gasKg && g.CategoryId == 1).FirstOrDefault(),
// udlejning_id = u.UdlejningId,
// Udlejning = u,
// VognIds = egavi.vognIds
//});
newpuList.Add(new produkt_udlejning
{
Antal = egavi.antal,
produkt_id = context.Produkters.Where(g => g.Type == egavi.gasKg && g.CategoryId == 1).FirstOrDefault().id,
Produkter = context.Produkters.Where(g => g.Type == egavi.gasKg && g.CategoryId == 1).FirstOrDefault(),
udlejning_id = u.UdlejningId,
Udlejning = u,
VognIds = egavi.vognIds
});
//udl.produkt_udlejning.Add(new produkt_udlejning
//{
// Antal = egavi.antal,
// produkt_id = context.Produkters.Where(g => g.Type == egavi.gasKg && g.CategoryId == 1).FirstOrDefault().id,
// Produkter = context.Produkters.Where(g => g.Type == egavi.gasKg && g.CategoryId == 1).FirstOrDefault(),
// udlejning_id = u.UdlejningId,
// Udlejning = u,
// VognIds = egavi.vognIds
//});
}
OpdaterUdlejningProduktUdlejning(newpuList, udl.UdlejningId);
//context.Entry(u.produkt_udlejning).State = System.Data.EntityState.Modified;
//context.Entry(puList).CurrentValues.SetValues(u.produkt_udlejning);
var vogne = context.Vogns.Where(v => vu.Keys.Contains(v.Nummerplade)).ToList();
foreach (Vogn v in vogne)
{
bool NrpladeFortelt = vu.FirstOrDefault(k => k.Key == v.Nummerplade).Value;
if (NrpladeFortelt)
{
u.vogn_udlejning.Add(new vogn_udlejning
{
Vogn = v,
vogn_id = v.Id,
Udlejning = u,
udlejning_id = u.UdlejningId,
Fortelt = NrpladeFortelt
});
//context.vogn_udlejning.Attach(new vogn_udlejning
//{
// Vogn = v,
// vogn_id = v.Id,
// Udlejning = u,
// udlejning_id = u.UdlejningId,
// Fortelt = NrpladeFortelt
//});
newvuList.Add(new vogn_udlejning
{
Vogn = v,
vogn_id = v.Id,
Udlejning = u,
udlejning_id = u.UdlejningId,
Fortelt = NrpladeFortelt
});
//udl.vogn_udlejning.Add(new vogn_udlejning
//{
// Vogn = v,
// vogn_id = v.Id,
// Udlejning = u,
// udlejning_id = u.UdlejningId,
// Fortelt = NrpladeFortelt
//});
}
else
{
u.vogn_udlejning.Add(new vogn_udlejning
{
Vogn = v,
vogn_id = v.Id,
Udlejning = u,
udlejning_id = u.UdlejningId,
Fortelt = NrpladeFortelt
});
//context.vogn_udlejning.Attach(new vogn_udlejning
//{
// Vogn = v,
// vogn_id = v.Id,
// Udlejning = u,
// udlejning_id = u.UdlejningId,
// Fortelt = NrpladeFortelt
//});
newvuList.Add(new vogn_udlejning
{
Vogn = v,
vogn_id = v.Id,
Udlejning = u,
udlejning_id = u.UdlejningId,
Fortelt = NrpladeFortelt
});
//udl.vogn_udlejning.Add(new vogn_udlejning
//{
// Vogn = v,
// vogn_id = v.Id,
// Udlejning = u,
// udlejning_id = u.UdlejningId,
// Fortelt = NrpladeFortelt
//});
}
}
OpdaterUdlejningVognUdlejning(newvuList, udl.UdlejningId);
//((System.Data.Entity.Infrastructure.IObjectContextAdapter)udl).ObjectContext.Detach(vu2);
//context.Entry(vu2).State = System.Data.EntityState.Modified;
u.UdlejningId = udl.UdlejningId;
context.Entry(udl).CurrentValues.SetValues(u);
//context.Entry(puList).CurrentValues.SetValues(newpuList);
//context.Entry(vuList).CurrentValues.SetValues(newvuList);
context.SaveChanges();
}
}
}
public static void OpdaterUdlejningVognUdlejning(List<vogn_udlejning> vuList, int uid)
{
using (var context = new CampingForumEntities1())
{
var udlVu = context.Udlejnings.Include("vogn_udlejning").FirstOrDefault(d => d.UdlejningId == uid);//Old
udlVu.vogn_udlejning.Clear();
foreach (vogn_udlejning vu in vuList)
udlVu.vogn_udlejning.Add(vu);
context.SaveChanges();
}
}
public static void OpdaterUdlejningProduktUdlejning(List<produkt_udlejning> puList, int uid)
{
using (var context = new CampingForumEntities1())
{
var udlPu = context.Udlejnings.Include("produkt_udlejning").FirstOrDefault(d => d.UdlejningId == uid);//Old
List<produkt_udlejning> tempList = udlPu.produkt_udlejning.ToList();
udlPu.produkt_udlejning.Clear();
foreach (produkt_udlejning pu in puList)
{
//context.produkt_udlejning.Attach(pu);
//context.Entry(pu).State = System.Data.EntityState.Modified;
udlPu.produkt_udlejning.Add(pu);
}
context.SaveChanges();
}
}