c# - 使用 Linq to SQL 将 C# 对象与 Varbinary 相互转换

标签 c# .net sql varbinarymax

我希望能够将任何 C# 对象保存在 SQL 数据库表的单个列中。我不清楚如何将对象转换为 varbinary 或从 varbinary 取回它。我的 SystemContextObjects 表有一个 OptionValue 列,它是 Varbinary(max)。

var dc1 = new DataContextDataContext();
var optionUpdate = dc1.SystemContextObjects.SingleOrDefault(o => o.OptionId == OptionId && o.OptionKey == OptionKey);
if (optionUpdate != null)
{
    optionUpdate.OptionValue = Value;  <===== NEED HELP HERE...
    optionUpdate.DateCreated = DateTime.Now;
    optionUpdate.PageName = PageName;
    var ChangeSet = dc1.GetChangeSet();
    if (ChangeSet.Updates.Count > 0)
    {
        dc1.SubmitChanges();
        return;
    }
}

最佳答案

您可以为此使用二进制序列化程序,例如使用 BinaryFormatter - 但是你的类必须是可序列化的并被标记为可序列化,这里有一个简单的例子:

您有一个简单的 Person 类并将其标记为可序列化:

[Serializable]
public class Person
{
    public string Name { get; set; }
    public string Address { get; set; }
}

然后您可以使用内存流将其序列化以提取表示对象的字节数组:

Person p = new Person() { Name = "Fred Fish", Address = "2 Some Place" };
using (MemoryStream ms = new MemoryStream())
{
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(ms, p);

    ms.Position = 0;
    byte[] personData = ms.ToArray(); // here's your data!
}

要从字节数组重新创建一个 Person 对象,您可以使用反序列化,其工作方式与此类似:

byte[] personData = ...
using (MemoryStream ms = new MemoryStream(personData))
{
    BinaryFormatter formatter = new BinaryFormatter();
    Person p = (Person)formatter.Deserialize(ms);
}

关于c# - 使用 Linq to SQL 将 C# 对象与 Varbinary 相互转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9899416/

相关文章:

c# - XML 中命名空间的区别

c# - 如何使用 Moq 来满足单元测试的 MEF 导入依赖?

mysql - 为什么 SQL LIMIT 子句会为每个查询返回随机行?

python - 我们必须在 PySpark 中进行复杂查询还是使用 .filter/.select 进行简单查询?

mysql - 如何在同一查询中获取返回行数和数据的 count()

c# - 为什么 resharper 不建议在迭代 List 时使用 linq?

c# - VS2010 中的文件夹上下文菜单中缺少 "Include in Project"选项

c# - 为什么使用匿名类型有效而使用不在 GroupBy 中的显式类型?

c# - AutoFixture 作为 Automocking 容器与 Automocking 的区别?

c# - 引用 COM DLL 时帮助文本丢失