C# LINQ到SQL:按值在内存中存储单个记录(提交更改后不应更改)

C# LINQ到SQL:按值在内存中存储单个记录(提交更改后不应更改),c#,linq-to-sql,C#,Linq To Sql,我很确定肯定已经有这样一个问题了,但我就是找不到 我想通过LINQ从SQL检索一条记录,并将其存储在一个变量中。 然后我想更新数据,但变量仍然应该包含旧值。变量基本上应该“按值”存储记录 对于多个记录,我可以使用.ToList()检索数据并将其存储在内存中,但对于单个记录,最好的方法是什么 例如: var record = dc.MyTable.Where(p => p.ID == 1).FirstOrDefault(); var orignalRecord = ??; record.N

我很确定肯定已经有这样一个问题了,但我就是找不到

我想通过LINQ从SQL检索一条记录,并将其存储在一个变量中。 然后我想更新数据,但变量仍然应该包含旧值。变量基本上应该“按值”存储记录

对于多个记录,我可以使用.ToList()检索数据并将其存储在内存中,但对于单个记录,最好的方法是什么

例如:

var record = dc.MyTable.Where(p => p.ID == 1).FirstOrDefault();
var orignalRecord = ??;

record.Name == "New Value";
dc.SubmitChanges();

//Now I would like orignalRecord.Name to still have "Old Name".

本机不支持此行为,但您有两种选择自己实现它:

  • 在对象类中这样定义
    Clone
    方法(这种方式仅支持浅复制):

  • 实现一种方法,使用诸如
    Newtonsoft
    之类的序列化程序对对象进行序列化和反序列化(这种方式支持深度复制)

  • class MyTable
    {
        public string Name { get; set; }
    
        public MyTable Clone()
        {
            return (MyTable)MemberwiseClone();
        }
    }