【发布时间】:2017-12-05 01:34:38
【问题描述】:
我有一些简单的代码用于更新以字节[] 形式保存在我的数据库中的个人资料图片。出于某种奇怪的原因,它在我的代码中运行时完全没有错误,但是数据库没有使用用户选择的新图片进行更新。
Client client = db.Clients.FirstOrDefault(c => c.Email == User.Identity.Name);
if (client != null)
{
client.ProfileImage = bytes;
db.Clients.Attach(client);
var entry = db.Entry(client);
entry.Property(e => e.ProfileImage).IsModified = true;
db.SaveChanges();
}
下面是Client实体类的代码:
public partial class Client
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Client()
{
Customers = new HashSet<Customer>();
}
public int ID { get; set; }
public int? StripeID { get; set; }
[Required]
[StringLength(200)]
public string Name { get; set; }
[Required]
[StringLength(150)]
public string Email { get; set; }
public Guid UserID { get; set; }
public bool IsActive { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public byte[] ProfileImage { get; set; }
public virtual StripeInfo StripeInfo { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Customer> Customers { get; set; }
}
此外,在调试代码之后,我可以看到配置文件图像被设置为正确的字节 [] 并且 client.ProfileImage 然后包含正确的字节 [],但是一旦调用 db.SaveChanges(),客户端.ProfileImage 立即设置回原来的样子。没有发生错误或任何事情,所以我真的无法弄清楚为什么会发生这种情况。
2017 年 7 月 4 日
以下是我在互联网上查看了更多之后尝试的一些其他方法:
1) 创建一个新的数据库上下文实例来进行更新。 2) 处理掉原来的数据库上下文并创建一个新的上下文来进行更新。
上述尝试均未奏效。调用 db.SaveChanges() 时,ProfileImage 属性仍然只是设置回原始值。
【问题讨论】:
-
请向我们展示实体
Client的代码,以及上下文中是否包含任何自定义代码。 -
@DavidG 刚刚添加了Client实体类的代码。我的数据库上下文没有任何自定义代码。
-
@DavidG 哇,我刚刚注意到配置文件图像上方的 [DatabaseGenerated(DatabaseGeneratedOption.Computed)] 行....这当然是问题所在。我不知道它在那里。
-
你是对的!添加一个答案,我将更改接受的答案并给你赏金。对此感到抱歉。
-
@DavidG 如果您发布答案,我会接受它,以便您获得赏金。如果你不帮忙,我就不会注意到这个问题。
标签: entity-framework