1
我有用MySQL设置的LINQ to Entities。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();
有没有什么办法,使就地的变化,而无需使阵列的复制,使得其传播到数据库?例如,要将该字节[]标记为脏(或更好的解决方案)?
谢谢。这工作,一些小的变化。 entry.Property行需要移到if语句之外,否则它不会在已经连接的实体上运行。 其参数中的lambda也无效,但它只是将该字段的名称作为字符串来使用。 如果您将此行移到if语句下面,我会将其标记为答案。 –
在Detached检查之外移动了“Property”行,但是lambda版本是该方法的首选重载,因为如果属性名称更改,您将收到编译时错误。也许你在你的文件中缺少'using',或者你的EF版本不支持它?以下是引用它的文档:http://msdn.microsoft.com/en-us/library/gg671304(v=vs.113).aspx – Ocelot20