2014-07-15 2 views
4

모델 우선 접근 방식으로 새 데이터베이스를 만들고 유형 테이블 System.Drawing.Color에 열을 추가하고 싶지만 속성 목록에이 옵션이 없습니다.모델 우선 : Color 유형의 속성을 추가하는 방법?

사용할 수있는 데이터 유형보다 더 많은 데이터 유형을 사용할 수있는 방법이 있습니까? , 당신의 매핑에

public class ColorData 
{ 
    public int Id { get; set; } 

    public int Argb { get; set; } 

    public System.Drawing.Color Color 
    { 
     get { return new System.Drawing.Color.FromArgb(this.Argb); } 
     set 
     { 
     if(value!=null) 
      this.Argb = value.ToArgb(); 
     else 
      this.Argb = 0; 
     } 
    } 
} 

유창 바인딩을 사용하여 Color 속성을 구체적으로 무시 : 여기

답변

10

여기에 또 다른 옵션, Entity Framework 6 Code First - Custom Type Mapping

public class MyLittlePony { 
    public string Name { get; set; } 
    public Int32 Argb { 
     get { 
      return Color.ToArgb(); 
     } 
     set { 
      Color = Color.FromArgb(value); 
     } 
    } 

    [NotMapped] 
    public Color Color { get; set; } 
} 
에서 답을 적응 사용하는 것입니다

NotMapped 특성을 사용하면 엔티티 프레임 워크가 시도되지 않습니다. Color 속성을 데이터베이스의 열에 매핑합니다.

2

하나의 옵션은 int ARGB 색상의 버전을 가지고 여기에서

protected void override OnModelCreating(ModelBuilder builder) 
{ 
    var colorTable = builder.Entity<ColorData>(); 
    colorTable.HasKey(x => x.Id).HasColumnName("COLOR_ID"); 
    colorTable.Property(x => x.Argb).HasColumnName("COLOR_ARGB"); 
    colorTable.Ignore(x=>x.Color); 

    colorTable.ToTable("COLOR_DATA"); 
} 

당신 이제 모든 색상의 정적 메소드에서 데이터를 저장할 수 있습니다.

ColorData data = new ColorData(); 
data.Color = Color.Black; 
data.Color = Color.FromName("Black"); 
data.Color = Color.FromArgb(0xFF000000); 
data.Color = Color.FromArgb(255, 0, 0, 0); 

주석에서 선택한 한 가지 대안은 XML로 직렬화하는 것입니다.

위의 코드는 SQL Server에 고유하고 효율적인 데이터 형식을 사용하며 쉽게 유지 관리 할 수 ​​있으므로 정수를 사용합니다.

XML 버전은 훨씬 더 많은 공간을 차지하며 유지 관리가 쉽지 않으며 특정 색상 검색에 복잡성을 더합니다. 확장 된 System.Drawing.Color 유형은 다음과 같습니다.

<Color> 
    <A>123</A> 
    <R>45</R> 
    <G>67</G> 
    <B>89</B> 
    <ScA>0.482352942</ScA> 
    <ScR>0.026241‌​2224</ScR> 
    <ScG>0.0561284944</ScG> 
    <ScB>0.09989873</ScB> 
</Color> 

파란색을 쉽게 검색 할 수있는 것은 어느 것입니까? int 유형에 대해

이는 다음과 같습니다 xml 유형의 경우

SELECT COUNT(1) FROM Customer cust 
INNER JOIN Color col 
ON cust.FavouriteColorId = color.Id 
WHERE col.Argb = 0xFF0000FF 

:

SELECT COUNT(1) FROM Customer cust 
INNER JOIN Color col 
ON cust.FavouriteColorId = color.Id 
WHERE col.ArgbXml.value('/Color/A') = N'255' 
AND col.ArgbXml.value('/Color/R') = N'0' 
AND col.ArgbXml.value('/Color/G') = N'0' 
AND col.ArgbXml.value('/Color/B') = N'255' 
+0

감사합니다.하지만 Color.FromName ("name")을 사용하는 것이 좋습니다. 색상을 유형으로 설정하는 방법이 없습니다. 왜냐하면 나는 더 많은 차트 유형을 원한다. –

+0

@MihaiBratulescu 어떻게'Color'를 이름으로 변환 할 것을 제안합니까? – Aron

+0

@Aron'Colort.FromsString (myString)'과'Color.ToString()'someting this –

관련 문제