gpt4 book ai didi

c# - 实体模型类的属性 setter 是否应该设置为私有(private)?

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:13 24 4
gpt4 key购买 nike

由于主键 PassageId 将自动创建且无法更改,因此公开 PassageId 的 setter 没有意义(至少对我而言)。 PassageId 的 setter 是否应该设置为私有(private)?

public class Passage
{
public int PassageId { get; private set; }
public string Contents { get; set; }

public DateTime CreatedUtc { get; private set; }
public DateTime ModifiedUtc { get; private set; }
}

注意事项

我读过的大多数教程,作者总是使用 Visual Studio 的快捷方式 prop enter(两次)生成的默认属性,生成如下内容

public type PropertyName {get; set;}

所以我想知道他们为什么不将 setter 设为私有(private)。

最佳答案

这是因为通常(在设计方面)实体是一个对象,您将传递该对象以显示数据或更新数据。

因此,当实体被实例化时,您需要使用来自存储(或来自表示层的输入)的数据填充属性。

例如Person person = PersonService.GetById(personId);

假定 PersonService 调用 Entity Framework 并找到 ID 与 personId 匹配的单个 Person 记录,然后它将使用检索到的值填充该“person”实体。

Entity Framework 要填充实体,字段需要公开设置。

如果通过代码或用户输入更改了人名,则将在 SaveChanges() 方法中使用 Id 进行更新。

检查实体的属性时:

如果 Id 为 0,则它将被视为一个新实体,应该“添加”到 SaveChanges() 的存储中。

如果 Id 大于 0,则应在 SaveChanges() 上更新它。

如果要私下设置 Id 字段,在填充其余属性后,该类将需要一种方法(在内部)从其他地方获取当前实体的 Id - 没有多大意义。

关于c# - 实体模型类的属性 setter 是否应该设置为私有(private)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38190354/

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