强制LinqToSql提交

时间:2009-07-02 19:13:33

标签: linq-to-sql

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

在我的情况下,属性是XElement,它被修改,但DataContext没有捕获它,因为实际引用保持不变。

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我还没有找到一种方法来强制实体上的属性变脏。通过挖掘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 );
    }
}