2013-11-27 43 views
1

我有下面的类:C#DTO具有只读属性

[DataContract()] 
public partial class User 
{ 
    [DataMember()] 
    public int Id { get; set; } 

    [DataMember()] 
    public string Name { get; set; } 

    [DataMember()] 
    public string Surname { get; set; } 
} 

我的DTO类是在一个集会和我的模型(EF)是另一种。因此所有的属性必须是公开的get/set。

该Id是一个标识列,由db设置,也自动映射。不过,我不希望用户更改ID。

当用户使用dto时,是否可以在该属性上设置属性来将属性设置为只读属性?

回答

1

你总是可以让属性的访问更具体的你定义访问器。在代码中使用Id。这可能是这样的:

[DataMember] 
public int Id { get; private set; } 

不能使属性的getter/setter方法不是物业本身,例如限制较少

[DataMember] 
private int Id { public get; set; } 
1

你可以使用一个保护套:

[DataMember()] 
public int Id { get; protected set; } 

,确保字段只在构造函数中设置...