业务对象中的ID是否应该是只读的?

Ant*_*ony 8 c# business-logic

在我看来,业务对象的ID字段应该是只读的(公共get和私有集),因为根据定义,ID永远不会改变(因为它唯一地标识数据库中的记录).

这会在您创建新对象(尚未设置ID)时产生问题,通过存储过程将其保存在数据库中,例如返回新创建的ID,如果读取ID属性,如何将其存储回对象-只要?

例:

Employee employee = new Employee();  
employee.FirstName="John";  
employee.LastName="Smith";  

EmployeeDAL.Save(employee);
Run Code Online (Sandbox Code Playgroud)

如果此属性是只读的,那么Save方法(实际连接到数据库以保存新员工)如何更新Employee对象中的EmployeeId属性(应该是EmployeeId在创建后永远不会更改).

看起来Id应该可以由DAL写入,并且只读给世界其他地方.如果DAL类和Business对象在不同的​​程序集中,您如何实现这一点?

我不想在Employee类中创建一个Save方法,因为这个类应该与数据库无关.

Mik*_*-UK 2

另一种可能的解决方案是将 Employee 声明为:-

public class Employee
{
    public int Id { get; internal set; }
}
Run Code Online (Sandbox Code Playgroud)

...只要 Employee 和 DAL 类位于同一个程序集中,

我并不声称喜欢它,但我已经使用了它。