【问题标题】:What is the Best practice for implementing a 'many' navigation property in EF Core在 EF Core 中实现“多”导航属性的最佳实践是什么
【发布时间】:2018-07-28 02:39:12
【问题描述】:

因此,我有越来越多的数据库模型使用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&lt;T&gt;,如何防止它返回 null?

同时,设计 EF 模型时的经验法则是,模型应尽可能接近地表示表格。这条规则是否违反了上述任何一个示例?

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

【问题讨论】:

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


    【解决方案1】:

    我的回答是这样做:

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

    关于类型。您可能不应该使用 List 作为属性的声明类型,我会说最佳实践是使用接口声明这些属性(您可能希望在某些时候更改实际的实例类)。此外,不要在列表/集合/枚举器中公开更多的方法,而不是您绝对需要的方法。在大多数情况下,ICollection 或 IEnumerable 是可行的方法。

    【讨论】:

    • 除非你必须使用 AddRange() 你必须使用 List。
    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多