LINQ to Entities - 更新二进制字段

时间:2014-01-27 14:37:38

标签: c# mysql linq entity-framework binary

我使用MySQL设置了LINQ to Entities。

一个字段是二进制类型,例如varbinary(50)。

LINQ to Entities正确地将其作为byte []返回。

但是,如果我只更改byte []中一个索引的值,则在调用SaveChanges()时,更改不会传播到数据库。

例如,这不起作用:

byte[] foo = GetBinaryFromDatabase(context);
foo[0] = 42;
context.SaveChanges();

我可以通过创建一个全新的字节数组来保存更改,将其复制并分配回来而不是就地进行。

例如,这有效:

byte[] foo = GetBinaryFromDatabase(context);
byte[] bar = new byte[foo.Length];
Array.Copy(foo, bar, foo.Length);
bar[0] = 42;
foo = bar;
context.SaveChanges();

有没有办法在不必复制数组的情况下进行就地更改,以便传播到数据库?例如,将该byte []标记为脏(或更好的解决方案)?

1 个答案:

答案 0 :(得分:0)

您可以将属性标记为已修改,如下所示:

var entry = context.Entry(foo);

if (entry.State == EntityState.Detached)
    context.Set<FooType>().Attach(entity);

entry.Property(e => e.ByteProperty).IsModified = true;

// Or this if your version of EF doesn't support the lambda version:
// entry.Property("ByteProperty").IsModified = true;

我怀疑它正在寻找实际设置的属性,以便将其标记为已修改而不是修改属性的内容(就像您怀疑的那样)。