代码之家  ›  专栏  ›  技术社区  ›  Sumrak

强制LinqToSQL提交

  •  1
  • Sumrak  · 技术社区  · 15 年前

    如何强制LinqToSQL DataContext将属性视为脏属性并将其提交到数据库?

    在我的例子中,属性是Xelement,它会被修改,但DataContext不会捕获它,因为实际引用保持不变。

    我想我可以尝试分配属性空或新的Xelement,然后将其分配回原始的Xelement。这是最好的解决方案吗?

    我在修改Xelement子项后调用SubmitChanges。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Andrew Siemer    15 年前

    您可能需要使用 Attach(object, true) 在这里,您告诉DataContext您要传递的版本是您要保存的版本。然后你可以打电话 SubmitChanges() 从那里。

        2
  •  0
  •   Sumrak    15 年前

    我还没有找到强制实体上的属性变脏的方法。从挖掘linqtosql代码来看,似乎跟踪了旧值,然后将其与新值进行比较,因此通常必须使用attach,或者必须克隆当前对象以创建新引用。

    我通过定制我的表类来解决Xelement的问题。更改Xelement后,我只需基于旧元素创建新的Xelement:

    partial class Table
    {
        partial void OnLoaded()
        {
            if( XmlData != null )
            {
                XmlData.Changed += this.XmlData_Changed;
            }
        }
    
        private void XmlData_Changed( object sender, XObjectChangeEventArgs e )
        {
            this.ModifiedCardData = new XElement( this.XmlData );
        }
    }