仍然习惯了Entity框架,但我已经看到了类似下面的代码,他们在Entity中拥有id的私有setter .
public int Id { get; private set; }
public string FirstName { get; set; }
public string LastName { get; set; }
为什么有些人会有私人制定者 . 这个Id字段无论如何都是在数据库中自动生成的,这是因为它设置为私有?
另外,为什么我们需要私有构造函数和公共构造函数,如下所示?
private Emp() { }
public Emp(string name, string lastname)
{
FirstName = firstname;
LastName = lastname;
}
3 回答
你不是由数据库自动生成的,所以为什么要做一些没有意义的事情呢?因此,您将
Id
setter设为私有 . EF在物化对象时仍然可以设置此属性,即使它是私有的 .与构造函数相同的故事 . EF要求您的实体具有无参数构造函数,但它可以是私有的 . 但是你不希望(在你的例子中)用户创建实体而不提供名字和姓氏,因为很可能这些名字是必需的,你想要不可避免地表达这个意图 . 因此,您有一个构造函数可以创建实体(两个名称都已设置),另一个构造函数用于实现从数据库接收的对象(无参数的一个) .
请注意,EF不需要私有setter和构造函数的这种配置 . 所有这些都是为了方便开发人员以防止意外行为(设置
Id
字段或在不提供名称的情况下设置Emp
实体) .私有setter对于向用户提供只读属性非常有用,这意味着它不允许您修改它 . 因为像
ID
这样的某些属性你不希望它被修改,或者,如果你想在类级别添加一些验证或设置属性(来自类中) . 在这种情况下,我们使用像私人设定器 .或者有时候喜欢
除了提供的答案之外,随着C#6.0的引入,您不再需要私有设置器来设置属性的值 .
您可以使用以下代码而不是私有setter:
您可以查看here以获取更多信息
对于私有构造函数:使用私有构造函数,您不希望通过类外部的代码创建类 . Singletons,factories,static method objects是限制构造函数的示例 .