用LINQ声明SQL Server可变二进制字段的正确方法



在这里学习LINQ,熟悉经典SQL和ADO。

在我继续我的项目并使任何类型更改过于昂贵之前,请让我知道使用varbinary列的正确方法是什么。如何使用LINQ声明它们?为了不引起任何疼痛,它应该映射到什么类型

现在我已经测试了映射到byte[]数组,它在一些初始测试中工作得很好。我计划存储从流中收集的数据,并且由于流的内容可以通过ToArray()方法以字节数组格式获得,因此这种方法似乎是可行的。

private byte[] _testVarbinary;
[Column(Storage="_testVarbinary")]
public byte[] testVarbinary
{
    get
    {
        return this._testVarbinary;
    }
    set
    {
        this._testVarbinary = value;
    }
}
...
// Reading
Console.WriteLine("Field size: {0}", f.testVarbinary.Length);
// Updating
f.testVarbinary = new byte[]{128, 129, 130, 131};
db.SubmitChanges();

那么,我应该映射到其他一些更linq风格的类型吗?或者坚持基本的byte[]就可以了。

byte[]应该工作得很好,但如果您喜欢,也可以使用Linq.Binary类。它代表一个不可变的字节块(byte[]是可变的)。

使用f.testVarbinary[0] = 123;将无法修改记录的值,因为实体只跟踪属性testVarbinary,而不是数组的每个元素。您可以通过调用属性setter将属性标记为已修改,如:

f.testVarbinary = f.testVarbinary;

然而,这样做的标准方法是:

DbEntityEntry<MyEntity> entry = context.Entry(f);
entry.Property(e => e.testVarbinary).IsModified = true;

或者将整个实体标记为已修改,使用:

entry.State = EntityState.Modified;

最新更新