2013-05-13 4 views
1

저는 Entity Framework을 처음 사용하기 때문에 문제를 해결하는 방법을 찾지 못했습니다. 다음과 같이 I는 User 실체가 :편집 할 수없는 사용자 지정 값이있는 데이터베이스 필드

public int ID { get; set; } 
public string Name { get; set; } 
public string Email { get; set; } 
public string Username { get; set; } 
public string Password { get; set; } 
public string Checksum 
{ 
    get 
    { 
     return Checksum; 
    } 

    set 
    { 
     MD5 md5 = new MD5CryptoServiceProvider(); 
     byte[] originalBytes = ASCIIEncoding.Default.GetBytes(this.Email); 
     byte[] encodedBytes = md5.ComputeHash(originalBytes); 

     Checksum = BitConverter.ToString(encodedBytes); 
    } 
} 

Checksum 사용자 입력이되지 않습니다 필드; 나는 그가 어떤 논리 (그의 세터에있는 논리)에 의해 결정되기를 바란다. 일부 사용자에게 합리적인 데이터를 업데이트해야 할 때 보안 검사에 사용할 것입니다.

나는 올바른 길을 가고 있습니까? 이 작업을 수행하는 올바른 방법은 무엇입니까? 사전에

감사합니다!

답변

1

체내 어느 곳에서도 value을 사용하지 않는 설정자는 기술을 잘못 사용하는 지표입니다. 필드가 읽기 전용이면 getter 만 제공하십시오. 설정중인 값을 버릴 계획이라면 설정기를 제공하지 마십시오. 대신 계산 된 값이 종속 된 값을 결정하고 Checksum의 설정 논리를 설정자로 이동하십시오.

클래스를 사용하는 경우는 Email 속성 만 종속됩니다. 다음과 같이 클래스를 변경할 수 있습니다 UpdateChecksum 별도의 방법으로 이동하는 방법을

public int ID { get; set; } 
public string Name { get; set; } 
private string email; 
public string Email { 
    get { return email; } 
    set { email = value; UpdateChecksum(); } 
} 
public string Username { get; set; } 
public string Password { get; set; } 
private string checksum; 
public string Checksum { 
    get { return checksum; } 
} 
private void UpdateChecksum() { 
    MD5 md5 = new MD5CryptoServiceProvider(); 
    byte[] originalBytes = ASCIIEncoding.Default.GetBytes(email); 
    byte[] encodedBytes = md5.ComputeHash(originalBytes); 
    checksum = BitConverter.ToString(encodedBytes); 
} 

참고. 이는 여러 종속성이있는 상황에서 유용합니다. 논리를 개별 설정자에 포함하는 대신,이를 메소드로 이동하여 필요에 따라 호출하는 것이 좋습니다.

+0

@dasblinkenlight에게 감사드립니다. 개념을 이해했습니다. 나는 setter가 없기 때문에 필자의 데이터베이스를위한 필드를 맵핑 할 수 있도록 좀 더 문제를 겪었습니다. 그러나 모든 것이 이제 예상대로 작동합니다 :-) –

관련 문제