gpt4 book ai didi

c# - 如何避免在构造函数中调用虚函数?

转载 作者:IT王子 更新时间:2023-10-29 04:42:33 28 4
gpt4 key购买 nike

我的大多数(如果不是全部) Entity Framework POCO 都有虚函数。我需要这些函数是虚拟的,以便可以延迟加载实体。

如果我在构造函数中初始化 Accommodations,那么我将在构造函数中调用虚函数,这是不好的做法。

但是,如果不在构造函数中,我该如何初始化 Accommodations

public class Venue
{
public Venue()
{
Accommodations = new HashSet<Accommodation>();
}

public virtual ICollection<Accommodation> Accommodations { get; set; }
}

最佳答案

另一种选择是将 setter 标记为私有(private)。这将消除在构造函数中调用虚拟成员的问题。

完成后,您需要为调用方(EF 除外)提供根据您的设计需要设置该属性的方法。您可以使用重载的构造函数来传递住宿列表,或者有选择地封装您的集合(域驱动设计)并使用方法来添加/删除项目(注意,对于 EF,这变得“hackish”,因为它缺乏对完全封装的支持集合,与 NHibernate 不同):

public class Venue
{
public Venue()
{
Accommodations = new HashSet<Accommodation>();
}

public Venue(ICollection<Accommodation> accommodations)
{
Accommodations = new List<Accommodation>(accommodations);
}

public virtual ICollection<Accommodation> Accommodations { get; private set; }
}

关于c# - 如何避免在构造函数中调用虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16055519/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com