我有一个具有属性的对象:
[Column]
public Binary Image { get; set; }
当第一次保存对象时,每次都可以,但是当它被修改时,我在SubmitChanges上得到一个例外:
数据类型图像和 varbinary(max)与...不兼容 等于操作员。
这可能是什么问题?
答案 0 :(得分:2)
你得到了,“”例外吗?问题是linq2sql想要检查以确保它应该在实际修改它之前修改列。我通常不在乎并且非常乐意更新整行,因此我将UpdateCheck = UpdateCheck.Never
命名参数放在我的ColumnAttributes
中。即,
[Column(UpdateCheck = UpdateCheck.Never)]
然后,当我想保存该项目时,我就这样做了:
Table<TEntity> da = MyDataContext.Context.GetTable<TEntity>();
if (entity.Id > 0)
da.Attach(entity, true);
else
da.InsertOnSubmit(entity);
da.Context.SubmitChanges();
答案 1 :(得分:0)
我认为您可能会遇到LINQ to SQL中的默认乐观Concurreny 行为(我相信LINQ to Entities的工作方式相同)。
除非另有说明,否则在更新行之前,它会针对行中所有列的先前值发出SELECT语句,以查看是否有其他人在将其保留在内存中时对其进行了修改。
然而,听起来它不知道如何比较两个二进制实例。
如果是这种情况,您有两种选择:
这是LINQ to SQL的documentation for Optimistic Concurrency。
答案 2 :(得分:0)
退一步 - 你如何比较这些变量?
您是否计算图像的哈希值?比较哈希比比较图像字节的字节要好得多。