所以我有越来越多的数据库模型使用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?在这种情况下防止这种情况的最佳情况是什么?
我的答案是这样做:
public ICollection<Resource> Resources { get; set; } = new List<Resource>();
关于类型。您可能不应该使用List作为属性的声明类型,我会说最佳做法是使用接口声明这些属性(您可能希望在某些时候更改实际的实例类)。此外,不要在list / collection / enumerator中公开更多的方法然后你需要的东西。在大多数情况下,ICollection或IEnumerable是要走的路。