linq2sql图像保存问题

时间:2009-12-22 18:35:47

标签: c# .net asp.net-mvc linq linq-to-sql

我有一个具有属性的对象:

[Column]
public Binary Image { get; set; }

当第一次保存对象时,每次都可以,但是当它被修改时,我在SubmitChanges上得到一个例外:

  

数据类型图像和   varbinary(max)与...不兼容   等于操作员。

这可能是什么问题?

3 个答案:

答案 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)

退一步 - 你如何比较这些变量?

您是否计算图像的哈希值?比较哈希比比较图像字节的字节要好得多。