gpt4 book ai didi

c# - Entity Framework 多对多关系更新

转载 作者:太空宇宙 更新时间:2023-11-03 12:18:57 25 4
gpt4 key购买 nike

如何更新多对多导航属性?

我想更新实体我得到一个错误

have the same primary key value

我知道有办法将多对多关系拆分为两个多对一关系,但事实就是如此。更新多对多关系。

我这样做是为了毫无问题地添加具有导航属性的新实体,但更新时出现错误。我试图在更新中删除 db.Entry(item).State = ...,但问题仍然存在。

public class TrendChart
{
public int Id { get; set; }
public string Name { get; set; }

public virtual List<ParameterMonitor> Monitors { get; set; }
}

public class ParameterMonitor
{
public int Id { get; set; }
public virtual List<TrendChart> Charts{ get; set; }
}

var db = new DataAccess.ApplicationDbContext();

var newTrendChart = db.TrendChart.Where(x => x.Id == trendChart.Id).FirstOrDefault();

if (newTrendChart != null)
{
if (newTrendChart.Monitors != null)
newTrendChart.Monitors.Clear();

newTrendChart.Name = trendChart.Name;
newTrendChart.Monitors = new List<ParameterMonitor>();

foreach (var item in trendChart.Monitors)
{
newTrendChart.Monitors.Add(new DataAccess.ParameterMonitor { MOParameterId = item.MoParameterId });
}

// prevent from adding new parameter
foreach (var item in newTrendChart.Monitors)
{
// here the ERROR happens
db.Entry(item).StateSystem.Data.Entity.EntityState.Unchanged;
}

db.SaveChanges();
}

最佳答案

我找到了解决方案,重点是每当您尝试在中间表中添加内容时,CLEAR() 函数不会删除我们看不到的幕后项目的历史记录,请考虑在中间表,1,2 和 1,3。如果您只想按 1,2 更新表,则意味着清除函数删除 1,2 和 1,3 并再次添加 1,2。但它不起作用,因为幕后已经有一个项目 1,2。我们需要删除()1,3并且不关心1,2。有没有其他解决方案。

  var tempMOList = new List<int>();
tempMOList = newTrendChart.Monitors.Select(x=> x.MOParameterId).ToList();
foreach (var id in tempMOList)
{
var temp = newTrendChart.Monitors.Where(x => x.MOParameterId == id).FirstOrDefault();
if (trendChart.Monitors.Any(x => x.MoParameterId == id) == false)
newTrendChart.Monitors.Remove(temp);

}

foreach (var item in trendChart.Monitors)
{
if (newTrendChart.Monitors.Any(x => x.MOParameterId == item.MoParameterId) == false)
newTrendChart.Monitors.Add(new DataAccess.ParameterMonitor { MOParameterId = item.MoParameterId });
}

//prevent from adding new parameter
foreach (var item in newTrendChart.Monitors)
{
db.Entry(item).State = System.Data.Entity.EntityState.Unchanged;
}
db.SaveChanges();

关于c# - Entity Framework 多对多关系更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48364193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com