[英]ASP.NET MVC 3 validation error not firing when a complex type is used in Entity Framework
[英]ASP.NET MVC with Entity Framework - Update/Save complex type property
我有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可以有一个数量列表,一个数量有一个单位。 如果我想保存带有实体框架的Stat,我必须遍历其数量列表,并检查数量是否已存在或新创建(数据来自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();
}
问题是,当更多的数量具有相同的单位时,会发生错误:“ObjectStateManager中已存在具有相同键的对象.ObjectStateManager无法使用相同的键跟踪多个对象。”
我不知道如何使用其数量和单位列表更新Stat。
如您所述,当多个数量具有相同的单位时,会出现问题。 为避免多次添加相同单位,您可以检查单位是否已在数据库中。 如果存在则重用现有单元。
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.