对 EF Core 中的 1 到 n 关系使用 IList、List、ICollection

raw*_*raw 5 c# database entity-framework list icollection

在 EF Core 中定义一对多关系的最佳实践是什么?

是否建议一般使用列表,因为它们提供更多功能?然后是接口 IList 而不是 List,因为它没有定义实现?如果确实重要,我应该根据什么标准选择其中之一?

Microsoft 建议使用以下 https://docs.microsoft.com/en-us/ef/core/modeling/relationships

public class Blog
{
    public int BlogId { get; set; }
    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然而

http://www.entityframeworktutorial.net/efcore/configure-one-to-many-relationship-using-fluent-api-in-ef-core.aspx

https://www.learnentityframeworkcore.com/configuration/one-to-many-relationship-configuration 建议 ICollections

以下 2011 年的答案在 EF Core 中仍然有效吗?

/sf/answers/535918211/

小智 9

您应该选择的决定将取决于您需要执行的操作。

一般来说,您有三个主要选择:

  • IEnumerable<>用于只需要迭代的对象列表(没有像修改这样的附加操作)。
  • ICollection<>用于需要迭代和修改的对象列表。
  • List<>用于需要迭代、修改、排序、按索引访问的对象列表...

现在你可以想:所以我会一直使用 List,因为它提供了最多的功能,但请记住,它的开销最大,一个好的面向对象实践是针对接口而不是实现进行编程。实现可以而且将会改变。

然后您需要平衡和分析您的特定场景以做出最佳选择。

问候,

  • 好的,谢谢莱昂纳多。那么为什么不使用接口 Ilist&lt;&gt; 而不是 List&lt;&gt; 呢? (5认同)