특히 Entity Framework에서 계층 적 상속 구조를 설정하려고합니다. 예를 들어 사용자 환경 설정이 있다고 가정 해 보겠습니다.Entity Framework 여러 수준 속성 매핑
public class StorePreference: Preference { }
public class UserPreference : Preference { }
public class Preference {
public string BackgroundColor { get; set; }
public ContactMethod ContactMethod { get; set; }
}
public enum ContactMethod {
SMS,
Email
}
사용자의 환경 설정을 조회 할 수 있도록하고 싶습니다. 사용자가 없거나 속성 값이 null 인 경우 상위 (저장소) 기본 환경 설정을 조회합니다. 나는 SQL 쿼리로 이것을 작성한다면
public class UserPreference : StorePreference {
private string _backgroundColor;
public string BackgroundColor {
get {
if (this._backgroundColor == null)
return base;
return this._backgroundColor;
}
set { this._backgroundColor = value; }
}
}
, 그것은 CROSS은 CASE 문으로 적용 것 :
이상적으로, 나는 그것이 추상적 인 상속과 비슷한 일을하고 싶습니다
SELECT
CASE WHEN User.BackgroundColor == null THEN Store.BackgroundColor ELSE User.BackgroundColor END BackgroundColor,
CASE WHEN User.ContactMethod == null THEN Store.ContactMethod ELSE User.ContactMethod END ContactMethod
FROM UserPreference User
CROSS APPLY StorePreference Store
WHERE UserPreference.UserId = @UserId
EF에서로드하는 방법이 있습니까? 당신의 기본 클래스 추가 기본 속성 값에서
이 코드는 기본값을 하드 코드합니다. 기본 데이터베이스를 변경할 수 있도록 데이터 베 이스에 있어야합니다. –
Preference 기본값을 'DefaultPreference'처럼 자신의 개체로 설정 한 다음 생성자에서 기본값을 설정할 수 있습니까? –
방금 데이터베이스에서 원하면 별도로 사용해야하는 DefaultPreference 객체를 반영하도록 해답을 업데이트했습니다. –