是否应将实体模型类的属性的setter设置为private?

时间:2016-07-04 18:18:08

标签: c# entity-framework

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

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输入(两次)产生类似

的内容
public type PropertyName {get; set;}

所以我想知道为什么他们没有让这个设定者变得私密。

1 个答案:

答案 0 :(得分:1)

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

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

E.g。 Person person = PersonService.GetById(personId);

鉴于PersonService调用实体框架并找到Id匹配personId的单个Person记录,它将填充该人员'具有检索值的实体。

要为实体框架填充实体,需要公开设置字段。

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

检查实体的属性时:

如果Id为0,则将其视为新实体,并且应该添加'存储在SaveChanges()。

如果Id是> 0然后它应该在SaveChanges()上更新。

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