实体框架 - 相关的 ICollection 被具体化为 HashSet

发布于 2024-09-16 19:52:07 字数 563 浏览 2 评论 0原文

我在我的项目中使用 EntityFramework POCO + 代理 + 延迟加载。今天,我非常惊讶地发现类 Transaction 的相关集合 Rows 已具体化为 HashSet(而不是 EntityCollection) >)。我需要 EntityCollection 来跟踪集合中的更改。

public class Transaction
{
    public virtual ICollection<TransactionRow> Rows { get; set; }
}

然而,其他实体类将其相关集合具体化为EntityCollection

我正在通过 ObjectQuery 加载 Transaction,因此它应该位于上下文中。该对象的代理也被创建。

谁能告诉 - 实体框架如何决定使用什么 - HashSet 还是 EntityCollection?为什么有些东西会变成HashSet?

I use EntityFramework POCO + proxies + lazy loading in my project. Today I was pretty surprized to see that the class Transaction has its related collection Rows materialized into HashSet (instead of EntityCollection). I need EntityCollection for tracking changes in the collection.

public class Transaction
{
    public virtual ICollection<TransactionRow> Rows { get; set; }
}

However other entity classes have their related collection materialized into EntityCollection.

I am loading the Transaction through ObjectQuery, so it should be in the context. The proxy for the object is also created.

Could anyone tell - how does Entity Framework decide what to use - HashSet or EntityCollection? Why some thing become HashSets?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清引 2024-09-23 19:52:07

仅当满足以下两个条件时才会创建更改跟踪代理:

  • POCO 类是公共的、非密封的且非抽象
  • 所有 持久属性(带有 getter 和 setter)被标记为虚拟

Change tracking proxy is created only when these two conditions are met:

  • POCO class is public, non-sealed and non-abstract
  • All persisted properties (with getter and setter) are marked as virtual
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文