2010-11-19 2 views
1

안녕하세요,C# DAL 클래스 및 비즈니스 계층 클래스

이게 가능하면 알려주실 수 있습니까?

public class Person 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
} 

클래스 호출 채우기는 (그래서 사람하고 인구가있는 곳이에없는 코드의 인구와 같은 엔티티라는 어셈블리에있는 사람이 DataAccessLayer라는 다른 어셈블리에서 수행되는 말 같은 어셈블리)

// 아래 코드는 datareader 등에서 읽는 것이지만 이것을 설명하기 쉽도록했습니다.

Person p=new Person(); 
p.Name="tom"; 
p.id = 10; 

사람 클래스는 지금이 사람에 액세스 할 수 있도록 다른 시스템에 접근 할 것입니다. 내가 원하는 것은 다른 시스템이 ID를 변경할 수 없게하는 것입니다. 그것을 읽을 수는 있지만 쓰지는 마라. 이를 허용하고이 클래스를 다른 시스템 (예 : 비즈니스 개체) (즉 ORM)에만 공개하려면 다른 클래스 등을 만들어야합니까?

사람들이 많이 알고있는 것은 단지 ID를 읽기 전용으로 말하는 것입니다. 즉

public int ID { get; } 

하지만 난이 다음 내가 위의 유사한 코드에서 ID를 채울 수 없습니다 할 경우는 읽기 전용으로하기 때문에 내 DataAccessLayer에 내가 ID를 설정할 수 없습니다.

감사 니얼

당신은 당신이 다음 다른 DLL (DataAccessLayer) 할 수 있습니다 엔터티 DLL에 대한 플래그를보고 사용할 수 있도록 설정으로 ID를 전달할 수있는 개체에 대한 internal 생성자를 만들 수 있습니다
+0

왜 읽기 전용 속성을 유지하지 않고 단순히 생성자를 통해 백업 변수의 값을 설정해야합니까? – Pierreten

답변

4

이 DLL 내의 내부 호출. (InternalsVisibleTo 속성) 모양 당신과 당신의 ID 속성에 대한 개체의 ID를 지정합니다 ORM 도구를 향해

+0

예, 이것은 내 솔루션보다 캡슐화가 좋습니다 (포함 어셈블리 외부의 생성자 가시성 없음) – Pierreten

+0

그 점에 대해 대단히 감사드립니다. 좋은 해결책 – Somedeveloper

0

봐 :

public class MyEntity 
{ 
    public virtual int ID { get; protected set; } 

    // other properties 
} 

이 방법을 선택하면, 당신은 속성을 할당에 대해 걱정할 필요가 없습니다 및 유형의 주조.

관련 문제