【问题标题】:Own implementation of ICollection<T> in Entity Framework possible?在实体框架中自己实现 ICollection<T> 可能吗?
【发布时间】:2016-03-22 11:12:58
【问题描述】:

EF 中的 POCO 类通常看起来或多或少是这样的:

public partial class ThingEntity 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Thing> things{ get; set; }
}

他们总是使用 ICollection。

如果我想在 ICollection 上拥有更多方法,那么编写自己的 ICollection 实现会很糟糕吗?我在某处读到你不应该使用List&lt;T&gt; 而不是ICollection&lt;T&gt;,但是如果我有自己的ICollection 实现呢?

【问题讨论】:

  • 这些类的重点是根据您的表的PK和FK关系将对象映射到您的数据库表。只要您正确设计了数据库,您就不需要进行任何更改。我可以看到您可能希望扩展的地方,但您可以使用 Automapper 之类的工具为您做这种事情。你有一个例子说明你可能想在哪里/为什么要推出自己的产品。
  • 您有想要添加的额外方法的示例吗?

标签: c# entity-framework collections


【解决方案1】:

您可以使用您想要的集合。事实上,在我所有的模型中,我都使用List&lt;T&gt;,这确实是一种常见的模式。事实上,这是一个接口,最终,您需要该接口的具体实现。

【讨论】:

  • 感谢您的回答。在尝试用有用的方法编写一个已实现的类一个小时后,我意识到我可以为 ICollection 编写扩展方法 lol
  • 如果不希望扩展方法出现在别处,也可以创建一个继承自ICollection的新接口,并为新接口编写扩展方法。
  • 我不认为那些会在其他收藏中打扰我:D
【解决方案2】:

我尝试编写一个已实现的类,但一个小时后我意识到我可以为ICollection&lt;T&gt; 编写扩展方法。这要容易得多,而且我不必到处替换 ICollections 来获得我需要的方法。

这帮助我编写了通用列表的扩展方法: How to create extension method on generic collection

【讨论】:

    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    相关资源
    最近更新 更多