Jam*_*mes 6 c# setter constructor entity-framework
仍然习惯了Entity框架,但我已经看到了类似下面的代码,他们在Entity中拥有id的私有setter.
public int Id { get; private set; }
public string FirstName { get; set; }
public string LastName { get; set; }
Run Code Online (Sandbox Code Playgroud)
为什么有些人会有私人制定者.这个Id字段无论如何都是在数据库中自动生成的,这是因为它设置为私有?
另外,为什么我们需要私有构造函数和公共构造函数,如下所示?
private Emp() { }
public Emp(string name, string lastname)
{
FirstName = firstname;
LastName = lastname;
}
Run Code Online (Sandbox Code Playgroud)
您不需要自己设置主列值,正是因为它是由数据库自动生成的,所以为什么允许做一些没有意义的事情呢?因此,您将Idsetter设为私有.EF在物化对象时仍然可以设置此属性,即使它是私有的.
与构造函数相同的故事.EF要求您的实体具有无参数构造函数,但它可以是私有的.但是你不希望(在你的例子中)用户创建实体而不提供名字和姓氏,因为很可能这些名字是必需的,你想要不可避免地表达这个意图.因此,您有一个构造函数可以创建实体(两个名称都已设置),另一个构造函数用于实现从数据库接收的对象(无参数的一个).
请注意,EF不需要私有setter和构造函数的这种配置.所有这些都是为了方便开发人员以防止意外行为(设置Id字段或创建Emp实体而不提供名称).
私有 setter 可用于向用户提供只读属性,这意味着它不允许您修改它。因为像ID您这样的某些属性不希望它被修改或,如果您想在类级别(从类中)添加一些验证或设置属性。在这种情况下,我们使用像 .
public int Id { get; private set; }
Run Code Online (Sandbox Code Playgroud)
或有时像
private int Id ;
public int Id
{
get { return Id ; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2970 次 |
| 最近记录: |