在这里学习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;