"type"을 데이터베이스에 표시하는 좋은 방법은 무엇입니까?데이터베이스의 클래스 유형을 저장하는 가장 좋은 방법은 무엇입니까?
나는 수많은 하위 클래스에 의해 상속되는 기본 클래스 Action
을가집니다. Action
에는 Id
, Name
등의 멤버가 있으며 모두 action
이라는 데이터베이스의 테이블에있는 해당 열에 해당합니다. 그래서 action
테이블은 다음과 같습니다
id | name | type
type
열은 그것이 어떤 조치를 의미한다. 내 코드에서는 부모 Action
에서 파생 된 하위 클래스에 해당합니다. 이제 유형의 유형을 데이터베이스의 유형 필드에 저장하려면 어떻게해야합니까?
db의 유형 열은 모든 데이터 유형이 될 수 있습니다.
옵션 : DB에 문자열로
저장
action.GetType().ToString()
. 리플렉션을 사용하여 유형의 문자열 표현을 원래 유형으로 변환하여 db에서 액션 유형을 가져옵니다. 앞으로 클래스 이름이 변경되면 문제가 될 것입니다.각 하위 클래스를 의미하고
TypeAttribute
하여 장식하는 열거를 생성, 뭔가 같은 : 내가 열거를 만들 필요가 이후 여기에서public abstract class Action { public enum Kind { [Type(typeof(ControlAction))] ControlAction = 1, [Type(typeof(UpdateAction))] UpdateAction = 2, etc } public abstract Kind ActionType { get; } } public class ControlAction : Action { public override Kind ActionType { get { return Kind.ControlAction; } } } public class UpdateAction : Action { public override Kind ActionType { get { return Kind.UpdateAction; } } } //etc
이 각 클래스에 대한 것을 제외하고, 좋아 보인다 . 그리고 끝내야 할 일이 너무 많다.
클래스를
int
값과 연결하는 별도의 정적 해시 테이블<int, Type>
을 작성하십시오. 약간 읽을 수 있습니다.
이에 대한 더 나은 솔루션이 있습니까?
ORM을 만드시겠습니까? 또는 다른 응용 프로그램에서 재사용 할 수있는 데이터베이스에 클래스 유형 정보가 필요합니다 (아마도 가장 중요한 경우). – edsioufi
@edsioufi 아니오, 이것은 orm에 관한 것이 아닙니다. 'ControlAction','UpdateAction' 등의 각 자식 액션은 클라이언트가 생성 한 액션입니다. 각 액션 유형에는 클라이언트가 필요로하는 고유 한 정보 집합이 있습니다. 이제는 클라이언트가 데이터베이스에 작성한 작업을 저장하는 방법이 필요합니다. 나중에 db에서 이러한 다양한 액션을로드 할 때, 나는'UpdateAction'에서'ControlAction'을 분리해야합니다. – nawfal