gpt4 book ai didi

c# - LINQ to Entities - 更新二进制字段

转载 作者:行者123 更新时间:2023-11-30 23:07:08 25 4
gpt4 key购买 nike

我使用 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[] 标记为脏(或更好的解决方案)?

最佳答案

您可以像这样将属性标记为已修改:

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;

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

关于c# - LINQ to Entities - 更新二进制字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21383621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com