Entity Framework와 조건부 연결을 만들고 싶습니다. 아는 한 조건부 외래 키를 만들 수 없으므로 데이터베이스 서버 수준에서이 문제를 해결할 수 없습니다. 내가 그와 같은 테이블이 있습니다Entity Framework와 조건부 연결
---Property---
int id
string Name
int TypeId --> Condition on this.
int ValueId
---ValueString---
int id
string Value
---ValueInteger---
int id
int Value
---ValueBoolean---
int id
bool Value
지금, 속성 테이블의 유형 ID 필드는 값의 종류가 포함되어 있습니다. 예를 들어, 유형 ID == 1, 다음 ValueInteger 테이블에 ValueId 점 등
내가 몇 가지 해결 방법을 한 경우 유형 ID == 0 경우, 다음, 여기서, valueString 테이블에 포인트를 ValueId하지만 어딘가에 붙어 :
나는 그런 열거 있습니다
public enum PropertyType
{
String = 0,
Integer = 1,
Boolean = 2,
DateTime = 3,
List = 4
}
을 나는 그런 부분 클래스 구현 :
public partial class ProductProperty : EntityObject
{
public object Value
{
get
{
switch (Property.Type)
{
case PropertyType.String:
return ValueString.Where(w => w.id == this.ValueId).Select(s => s);//how to return?
break;
case PropertyType.Integer:
return ValueInteger.Where(w => w.id == this.ValueId).Select(s => s) //how to return?
break;
case PropertyType.Boolean:
return ValueBoolean.Where(w => w.id == this.ValueId).Select(s => s) //how to return?
break;
case PropertyType.DateTime:
return ValueDateTime.Where(w => w.id == this.ValueId).Select(s => s) //how to return?
break;
default:
return null;
break;
}
}
set
{
}
}
}
을하지만 나는 EntityObject에서 컨텍스트 개체에 도달하는 방법을 모른다 , 그래서 Property EntityObject의 Value * 테이블에 접근 할 수 없었습니다.
그래서이 접근법은 사실입니까, 아니면 어떻게해야합니까? 그것이 사실이라면 EntityObject에서 엔티티 컨텍스트 개체를 어떻게 얻을 수 있습니까?
수정 :이 방법을 제안하지 않으면 무엇을 제안합니까? 의견을 보내주십시오. 나는이 방법의 가장 좋은 대안이 같은 수 있습니다 생각 : 나는 다른 값 유형을 추가하려면
---Property---
int id
string ValueString
int ValueInteger
bool ValueBoolean
etc...
그러나이 방법은, 내가 테이블 구조를 변경해야합니다, 나는 개체를 업데이트해야합니다 내 프로젝트의 개체 모델. 값에 대한 데이터를 필터링해야하므로 직렬화 된 객체를 사용할 수 없습니다. 편집이 종료
일부 DB (Oracle)는 이러한 키를 허용합니다. 당신은 당신이 사용하는 DB를 언급하지 않습니다. 그렇지만이 디자인은 표준 SQL DB 또는 EF에 적합하지 않습니다. 다른 방법으로 문제를 해결할 것을 권합니다. –
감사합니다. Craig, MS SQL Server를 사용하고 있습니다. 코드에서 추가 공용 함수를 사용하여이 문제를 관리 할 수 있습니다. 그러나 그것은 단지 내 팀원들을 혼란스럽게하고 더 복잡한 일을합니다. 나는 (문자열) SomeProperty.Value 또는 (int) SomeProperty.Value와 같은 것을 사용하는 접근법이 필요하다. 나는 속성의 값을 얻기 위해 여분의 함수를 구현하고 싶지 않다. – oruchreis