为什么在实体中有 private setter
why to have private setter in entity
仍在习惯 Entity framework,但我已经看到如下代码,其中实体中的 id 为私有 setter。
public int Id { get; private set; }
public string FirstName { get; set; }
public string LastName { get; set; }
为什么有些人应该有私有 setter。这个 Id 字段无论如何都是在数据库中自动生成的,这就是它设置为私有的原因吗?
另外,为什么我们需要像下面这样的实体中的私有构造函数和 public 构造函数?
private Emp() { }
public Emp(string name, string lastname)
{
FirstName = firstname;
LastName = lastname;
}
Private setter 用于向用户提供只读 属性,这意味着它不允许您修改它。因为某些属性,如 ID
你不想修改它,或者,如果你想添加一些验证或在 class 级别设置 属性(从 class ).在那种情况下,我们使用 private setter like 。
public int Id { get; private set; }
或者有时像
private int Id ;
public int Id
{
get { return Id ; }
}
您永远不需要自己设置主列值,因为它是由数据库自动生成的,所以为什么允许做没有意义的事情?因此,您将 Id
setter 设为私有。实体化对象时,EF 仍然可以设置此 属性,即使它是私有的。
与构造函数相同的故事。 EF 要求您的实体具有无参数构造函数,但它可以是私有的。但是您不希望(在您的示例中)用户在不提供名字和姓氏的情况下创建实体,因为很可能需要这些名称并且您希望不可避免地表达这种意图。因此,您有一个构造函数供您创建实体(同时设置了两个名称)和一个构造函数供 EF 实现从数据库接收的对象(无参数的)。
请注意,私有 setter 和此构造函数配置都不是 EF 所必需的。所有这些都是为了方便开发人员以防止不良行为(设置 Id
字段或创建 Emp
实体而不提供名称)。
除了提供的答案外,随着 C# 6.0 的引入,您不再需要私有设置器来设置 属性.
的值
您可以使用以下代码代替私有设置器:
public class Appointment
{
public DateTime TimeStamp { get; } = DateTime.UtcNow;
public string User { get; } =
System.Security.Principal.WindowsPrincipal.Current.Identity.Name;
public string Subject{ get; } = "New Subject"
}
您可以查看here了解更多信息
至于私有构造函数:使用私有构造函数您不希望 class 由 class 之外的代码创建。 Singletons, factories, static method objects 是限制构造函数有用的示例。
仍在习惯 Entity framework,但我已经看到如下代码,其中实体中的 id 为私有 setter。
public int Id { get; private set; }
public string FirstName { get; set; }
public string LastName { get; set; }
为什么有些人应该有私有 setter。这个 Id 字段无论如何都是在数据库中自动生成的,这就是它设置为私有的原因吗?
另外,为什么我们需要像下面这样的实体中的私有构造函数和 public 构造函数?
private Emp() { }
public Emp(string name, string lastname)
{
FirstName = firstname;
LastName = lastname;
}
Private setter 用于向用户提供只读 属性,这意味着它不允许您修改它。因为某些属性,如 ID
你不想修改它,或者,如果你想添加一些验证或在 class 级别设置 属性(从 class ).在那种情况下,我们使用 private setter like 。
public int Id { get; private set; }
或者有时像
private int Id ;
public int Id
{
get { return Id ; }
}
您永远不需要自己设置主列值,因为它是由数据库自动生成的,所以为什么允许做没有意义的事情?因此,您将 Id
setter 设为私有。实体化对象时,EF 仍然可以设置此 属性,即使它是私有的。
与构造函数相同的故事。 EF 要求您的实体具有无参数构造函数,但它可以是私有的。但是您不希望(在您的示例中)用户在不提供名字和姓氏的情况下创建实体,因为很可能需要这些名称并且您希望不可避免地表达这种意图。因此,您有一个构造函数供您创建实体(同时设置了两个名称)和一个构造函数供 EF 实现从数据库接收的对象(无参数的)。
请注意,私有 setter 和此构造函数配置都不是 EF 所必需的。所有这些都是为了方便开发人员以防止不良行为(设置 Id
字段或创建 Emp
实体而不提供名称)。
除了提供的答案外,随着 C# 6.0 的引入,您不再需要私有设置器来设置 属性.
的值您可以使用以下代码代替私有设置器:
public class Appointment
{
public DateTime TimeStamp { get; } = DateTime.UtcNow;
public string User { get; } =
System.Security.Principal.WindowsPrincipal.Current.Identity.Name;
public string Subject{ get; } = "New Subject"
}
您可以查看here了解更多信息
至于私有构造函数:使用私有构造函数您不希望 class 由 class 之外的代码创建。 Singletons, factories, static method objects 是限制构造函数有用的示例。