【问题标题】:force LinqToSql to submit强制 LinqToSql 提交
【发布时间】:2009-07-02 19:13:32
【问题描述】:

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

在我的例子中,属性是 XElement,它被修改了,但 DataContext 没有捕捉到它,因为实际的引用保持不变。

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

我在 XElement 子项被修改后调用 SubmitChanges。

【问题讨论】:

    标签: linq-to-sql


    【解决方案1】:

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

    【讨论】:

    • 但我不想强制提交整个实体。只是被修改的属性。
    【解决方案2】:

    我还没有找到强制实体上的属性变脏的方法。从 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 );
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 2012-12-25
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      相关资源
      最近更新 更多