实体对象不能被多个 IEntityChangeTracker 实例引用 编辑 DataGrid 行

Posted

技术标签:

【中文标题】实体对象不能被多个 IEntityChangeTracker 实例引用 编辑 DataGrid 行【英文标题】:An entity object cannot be referenced by multiple instances of IEntityChangeTracker Edit Row of DataGrid 【发布时间】:2021-06-29 11:02:38 【问题描述】:

我想编辑我的 DataGrid 的某些行时收到此错误...

Xml 代码:

    <DataGridTemplateColumn Header="ویرایش" >
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <materialDesign:PackIcon Kind="TooltipEdit" MouseDown="Edit_OnMouseDown" Tag="Binding Path=." Width="20" Height="20" VerticalAlignment="Center" Margin="5" Foreground="ForestGreen"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

我很困惑,很累搜索不知道如何解决它..

 private void Edit_OnMouseDown(object sender, MouseButtonEventArgs e)
    

        if (sender is PackIcon btnSender)
        
            if (btnSender.Tag is Place place)
            
                place.LastUpdate = DateTime.Now;
                _context.Entry(place).State = EntityState.Modified; // => Error here
                _context.SaveChanges();
            
        
    

如果我删除或评论关系ICollection 并从Place 类继承BaseModel 类,这也将起作用 但我需要它们..

  public class Place:BaseModel// 

    [Key]
    public int PlaceId  get; set; 
    public string Name  get; set; 
    public long? PhoneNo  get; set; 
    public string Manager  get; set; 
    public string Address  get; set; 
    public short? RoomCounter  get; set; 

    public virtual ICollection<Suite> Suites  get; set;  // 
    public virtual ICollection<Bed> Beds  get; set;  //
    public virtual ICollection<Device> Devices  get; set;  //

有什么想法吗?

【问题讨论】:

【参考方案1】:

试试这个:

var existingPlace=_context.Set<Place>().FirstOrDefault(i=> i.Id==place.Id);

if(existingPlace!=null)

 place.LastUpdate = DateTime.Now;
_context.Entry(existingPlace).CurrentValues.SetValues(place);
_context.SaveChanges();

  

【讨论】:

以上是关于实体对象不能被多个 IEntityChangeTracker 实例引用 编辑 DataGrid 行的主要内容,如果未能解决你的问题,请参考以下文章

实体对象不能被多个 IEntityChangeTracker 实例引用 编辑 DataGrid 行

一个实体对象不能被多个 IEntityChangeTracker 实例引用,即使我分离了它

Core Data Cocoa 错误 1570。不能保存多个实体对象

mvc 从视图传递到Controller 多个不同的实体类接收如何做呢?

C# 实体框架每个 HttpContext 仅使用一个 ObjectContext

具有多个引用的实体框架 LoadProperty