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

时间:2018-02-17 08:32:45

标签: c# entity-framework entity-framework-core asp.net-core-2.0 ef-core-2.0

因此,我使用List<T>的数量越来越多的数据库模型用于“众多”导航属性。一个例子可能是这样的:

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?在这种情况下防止这种情况的最佳情况是什么?

1 个答案:

答案 0 :(得分:0)

我的回答是这样做:

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

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