在EF Core中实现“多个”导航属性的最佳实践是什么?

问题描述 投票:0回答:1

所以我有越来越多的数据库模型使用List<T>for他们的“许多”导航属性。一个例子可能是这样的:

public class ResourceType
{
    public int ResourceTypeId { get; set; }
    public string Name { get; set; }
    public List<Resource> Resources { get; set; }
}

我正在阅读有关C#的好习惯,以避免再次返回null而不是空列表。我可以想到几种方法来实现这一目标。

public List<Resource> Resources { get; set; } = new List<Resource>();

或者甚至通过这样做:

private List<Resource> _Resources { get; set; }
public List<Resource> Resources {
    get {
        if (_Resources == null) {
            _Resources = new List<Resource> ();
        }
        return _Resources;
    }
    set {
        _Resources = value;
    }
}

在其他地方人们建议使用ICollection<T>,如何防止这返回null?

同时,设计EF模型时的经验法则是模型应尽可能地代表表格。这条规则是否打破了上述任何一个例子?

所有这些都让我想到了一个问题:处理这类房产的最佳方法是什么?应该使用什么类型,是否应该阻止返回null?在这种情况下防止这种情况的最佳情况是什么?

c# entity-framework entity-framework-core asp.net-core-2.0 ef-core-2.0
1个回答
0
投票

我的答案是这样做:

public ICollection<Resource> Resources { get; set; } = new List<Resource>();

关于类型。您可能不应该使用List作为属性的声明类型,我会说最佳做法是使用接口声明这些属性(您可能希望在某些时候更改实际的实例类)。此外,不要在list / collection / enumerator中公开更多的方法然后你需要的东西。在大多数情况下,ICollection或IEnumerable是要走的路。

© www.soinside.com 2019 - 2024. All rights reserved.