gpt4 book ai didi

c# - 为什么在实体中有私有(private)二传手

转载 作者:太空狗 更新时间:2023-10-29 20:58:15 25 4
gpt4 key购买 nike

仍在习惯 Entity Framework ,但我已经看到如下代码,它们在实体中为 id 设置了私有(private) setter 。

public int Id { get; private set; }
public string FirstName { get; set; }
public string LastName { get; set; }

为什么有些人应该有私有(private)二传手。这个 Id 字段无论如何都是在数据库中自动生成的,这就是它设置为私有(private)的原因吗?

另外,为什么我们需要像下面这样的实体中的私有(private)构造函数和公共(public)构造函数?

private Emp() { }

public Emp(string name, string lastname)
{
FirstName = firstname;
LastName = lastname;
}

最佳答案

您永远不需要自己设置主列值,因为它是由数据库自动生成的,那么为什么允许做没有意义的事情呢?因此,您将 Id setter 设为私有(private)。 EF 仍然可以在具体化对象时设置此属性,即使它是私有(private)的。

与构造函数相同的故事。 EF 要求您的实体具有无参数构造函数,但它可以是私有(private)的。但是您不希望(在您的示例中)用户在不提供名字和姓氏的情况下创建实体,因为很可能需要这些名称并且您希望不可避免地表达这种意图。因此,您有一个构造函数供您创建实体(同时设置了两个名称)和一个构造函数供 EF 实现从数据库接收的对象(无参数构造函数)。

请注意,私有(private) setter 和构造函数的这种配置都不是 EF 所必需的。所有这些都是为了方便开发人员以防止意外行为(设置 Id 字段或创建 Emp 实体而不提供名称)。

关于c# - 为什么在实体中有私有(private)二传手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42573214/

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