2008-10-17 4 views
27

코드에서 열거 형에 매핑되는 데이터베이스 테이블에 문자열 열이 있습니다. 내 DBML 파일에서 MyTypes.EnumType MyTypes.EnumType "Type"설정할 때 다음 오류가 나타납니다.문자열에서 열거 형 매핑

오류 1 DBM1005 : DbType 'VarChar (50) NOT NULL'사이의 매핑 및 'MyTypes.EnumType'열 ' Type 'Table1'의 EnumCol '은 지원되지 않습니다.

이 질문에 대한 답변 : LINQ to SQL strings to enums 은 내가하고 싶은 일이 가능하다는 것을 나타내지 만 어떻게 처리됩니까?

답변

33

호기심 - IIRC가 작동해야합니다. 간단한 예를들 수 있는지 확인해 보겠다. 그러나 네임 스페이스를 포함하여 정규화 된 enum 이름을 갖고 있는지 확인하고 싶을 수도있다.

[업데이트] here에서 열거 형 문제를 해결할 때 RTM 버전이 버그와 함께 제공되는 것으로 보입니다. 한 가지 해결 방법은 (해당 페이지에서) global:: 접두사를 추가하는 것이 었습니다. 이 해결 방법이 없으면 잘 작동하므로 3.5 SP1에서 수정되었을 수 있습니까? 또한 열거 형이 동일한 네임 스페이스에있는 경우 규정되지 않은 이름을 사용하면 3.5에서 제대로 작동한다고합니다.

그래, 좋은 일 [예] :

<Column Name="ShipCountry" Type="Foo.Bar.MyEnum" DbType="NVarChar(15)" CanBeNull="true" /> 

이 생성 : 그때가하는 DBML을 편집

namespace Foo.Bar 
{ 
    public enum MyEnum 
    { 
     France, 
     Belgium, 
     Brazil, 
     Switzerland 
    } 
} 

: Northwind를 함께, 내가 배송 국가에 대한 열거 정의는

private Foo.Bar.MyEnum _ShipCountry; 
//... 
[Column(Storage="_ShipCountry", DbType="NVarChar(15)", CanBeNull=true)] 
public Foo.Bar.MyEnum ShipCountry 
{ get {...} set {...} } 

그리고 마지막으로 검색어 :

을 작성했습니다.
using (DataClasses1DataContext ctx = new DataClasses1DataContext()) 
{ 
    var qry = from order in ctx.Orders 
       where order.ShipCountry == Foo.Bar.MyEnum.Brazil 
       || order.ShipCountry == Foo.Bar.MyEnum.Belgium 
       select order; 
    foreach (var order in qry.Take(10)) 
    { 
     Console.WriteLine("{0}, {1}", order.OrderID, order.ShipCountry); 
    } 
} 

정상 작동; 검색 결과 :

10250, Brazil 
10252, Belgium 
10253, Brazil 
10256, Brazil 
10261, Brazil 
10287, Brazil 
10290, Brazil 
10291, Brazil 
10292, Brazil 
10299, Brazil 
+0

3.5 SP1을 얻었을 때 – Barry

+5

3.5 SP1을 "global ::"앞에 추가해야했습니다. 아마도 DataContext (Project.Dal) 및 엔터티 (Project.Dal.Entities)의 기본 네임 스페이스를 변경했기 때문일 수 있습니다. – jrummell

17

나는 답변을 받았지만 여전히이 오류가 발생합니다. 엄청 이상해.

어쨌든 해결책을 찾았습니다. PREPEND

(예 : WTF)의 전체 네임 스페이스는이어야합니다. 정확하게. 나는 그것이 매우 이상하게 들리는 것을 안다. 다음의 예 screenie는. =>

alt text http://img11.imageshack.us/img11/7517/lolzqg.png

그래서 절름발이 어쨌든 :(

, 나는이 알아낼하지 않았다 Matt라는 어떤 녀석입니다했다. 그리고 그는 MS 연결하고 버그 리포트를 게시 이 고정되어 있지 그래서 그들은 내가 생각, 그것을 repro 수 없습니다.

을 어쨌든, HTH를.

+1

모든 VB 용 빠른 참고.NET 사용자의 경우 Type 구문은 "Global. "이어야합니다. – Quango

+1

그래서 여러분이 말하는 것은 "함정"입니다. –

+1

나는 참으로! 우리는 그 MS 개발자들에게 더 많은 시간을 주어야하며, 그 슈퍼 스타 프로젝트에 모든 코드를 집중시켜야합니다! –

1

당신이 designer.cs에서 유형을 통해 글로벌 :: qualyfier와 Ctrl 키 + 스페이스를 추가하는 경우가 인식 파일 타입과 너 그것을 제거 할 수 있습니다.