2

在这里使用 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[]就好了。

4

1 回答 1

1

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

使用f.testVarbinary[0] = 123;不能修改记录的值,因为实体只跟踪属性,testVarbinary而不是数组的每个元素。您可能只需调用属性设置器即可将属性标记为已修改,如下所示:

f.testVarbinary = f.testVarbinary;

但是,这样做的标准方法是:

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

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

entry.State = EntityState.Modified;
于 2013-03-27T23:53:29.367 回答