gpt4 book ai didi

c# - 带有 Entity Framework 的 ASP.NET MVC - 更新/保存复杂类型属性

转载 作者:行者123 更新时间:2023-11-30 12:46:59 25 4
gpt4 key购买 nike

我有 3 个类,与 3 个数据库表相关:

public class Stat
{
public int Id { get; set; }
public string Name { get; set; }
public List<Quantity> Quantities { get; set; }
}
public class Quantity
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Stat Stat { get; set; }
public virtual Unit Unit { get; set; }
}
public class Unit
{
public int Id { get; set; }
public string Name { get; set; }
public string Abbreviation { get; set; }
public List<Quantity> Quantities { get; set; }
}

一个 Stat 可以有一个 Quantities 列表,一个 Quantity 有一个 Unit。如果我想使用 Entity Framework 保存 Stat,我必须遍历它的 Quantities 列表,并检查 Quantity 是否已经存在,或者是新创建的(数据来自 HTML 表单)。

public void UpdateStat(Stat stat)
{
foreach (Quantity q in stat.Quantities)
{
if (q.Id == 0)
{
db.Quantities.Add(q);
}
else
{
db.Entry(q).State = EntityState.Modified;
}
}
db.Entry(stat).State = EntityState.Modified;
db.SaveChanges();
}

问题是,当更多 Quantities 具有相同的 Unit 时,会出现错误:“ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。”

我不知道如何使用其数量和单位列表一起更新统计信息。

最佳答案

如您所述,当多个数量具有相同的单位时,就会出现问题。为避免多次添加相同的单元,您可以检查一个单元是否已在数据库中。如果存在,则重用现有单元。

if (q.Id == 0)
{
var unit=db.Units.FirstOrDefault(u=>u.Id==q.Unit.Id);
if(unit!=null)
q.Unit=unit;
db.Quantities.Add(q);
}

关于c# - 带有 Entity Framework 的 ASP.NET MVC - 更新/保存复杂类型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18036608/

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