gpt4 book ai didi

c# - 在 Entity Framework Core 中保存 HashSet

转载 作者:行者123 更新时间:2023-12-05 07:17:29 25 4
gpt4 key购买 nike

这是我当前的 EF Core 模型:

public class Application
{
[Key]
public string Name { get; set; }
public HashSet<string> Fields { get; set; }
}

hashset 属性不能单独使用,所以我在 OnModelCreating 中添加了它:

modelBuilder.Entity<Application>()
.Property(e => e.Fields)
.HasConversion(
v => v.ToArray(),
v => new HashSet<string>(v));

这在某些情况下可行,但存在一个大问题。

当我最初插入一个应用程序时,哈希集被正确地转换为字符串数组,并且 postgresql 数据库驱动程序正确地存储它。

然而,当我稍后再次获取应用程序时,修改哈希集,然后调用 .SaveChanges();它不起作用!

我必须显式调用 ctx.Update(app);以保存更改。

我认为这是因为 HashSet<string>实例不会改变,只有它的内容会改变,所以变化跟踪器将无法看到任何变化(但也许我的推理是错误的)。

我该如何解决这个问题?

这里的例子只有一个 HashSet,但是其他模型会有更多的属性,它们都会遇到同样的问题。

  • 有没有办法让变更跟踪器知道这些变更?
  • 是否有一种方法可以实现某种自定义集合,通知其“容器”它已被修改?
  • 是否可以告诉 EF 在转换后检查,而不是哈希集本身?

最佳答案

你检查过这个吗:https://stackoverflow.com/a/20712012/11649486

Entity Framework does not support collections of primitive types. You can either create an entity (which will be saved to a different table) or do some string processing to save your list as a string and populate the list after the entity is materialized.

关于c# - 在 Entity Framework Core 中保存 HashSet<string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58811843/

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