2014-12-05 8 views
1

NuGet의 ShortGuid를 설치했으며이 테이블을 내 테이블의 키로 사용하고 싶습니다. Guid가 아닌 데이터베이스에 22 문자 문자열을 저장하여 디버깅 할 때 레코드를 찾는 것이 더 쉽습니다. Entity Framework에서이 열을 만들려면 어떻게해야합니까? Entity Framework의 ShortGuid

내가 추가하는 시도 :

public ShortGuid NewCol { get; set; } 

그러나 더 열은 추가되지 않았다. 나는 시도했다 :

[Column(TypeName = "nvarchar")] 
[MaxLength(22), MinLength(22), StringLength(22)] 
public ShortGuid NewCol { get; set; } 

그러나 아직 열. 아마도 EF는 내가하려고하는 것을 이해하지 못하기 때문에 그냥 열을 무시합니까?

public Guid NewCol { get; set; } 

난 그냥 22 문자 문자열 열을 사용할 수 있습니다 생각하지만, 이상적으로 나는 ShortGuid 유형을 사용하고 싶습니다 : 난 그냥 GUID를 사용하는 경우 그것은 잘 작동합니다. 그게 가능하니? 복합 유형으로

+0

이것은 더 나은 디버그 환경을 경험할 수있는 "해킹"방식이 아닌 것 같습니다. 디버깅 프로세스/도구를 수정해야하는 것처럼 들립니다. –

+0

EF에서 GUID 만 사용하고 검색 할 때 NewGuid로 변환하면 어떨까요? –

+0

@ TheMuffinMan 오류가있을 때 데이터베이스를 파고 드는 때 Guid를 사용하는 것이 고통스럽지 않습니까? 디버깅 방법을 개선하기 위해 제안하는 방법을 잘 모르겠다 ... 그러나 또한 짧은 & '더 예쁜'URL을 만듭니다. – Sean

답변

0

로 사용할 수 없습니다. 내가 이해하는 한, 열의 유형은 복합 유형일 수 없습니다. 이것은 Entity Framework의 한계입니다 (그러나 이것에 대해서는 100 % 확실하지 않습니다).

나는 내 대답이 귀하의 질문에 대한 적절한 대답보다 해결 방법에 가깝다는 것을 알고 있음에도 불구하고 이러한 상황에서 내가 일반적으로하는 것을 나눌 것입니다.

클래스에 2 개의 속성을 만듭니다. 1) 데이터베이스에서 열로 사용할 속성과 2) 원래 클래스에서 유지하려고했던 속성. 다음 코드 스 니펫은 내가하려고하는 것을 설명 할 것이다.

Event.cs :이 도움이

namespace MyContext.Model 
{ 
    public partial class Event 
    { 
     [Key] 
     public int EventId { get; set; } 

     public string AccessTokenStr { get; set; } 

     // [NotMapped] tells Entity Framework to not make a column for the following property 
     [NotMapped] 
     public ShortGuid AccessToken 
     { 
      get 
      { 
       return new ShortGuid(AccessTokenStr); 
      } 

      set 
      { 
       AccessTokenStr = value.ToString(); 
      } 
     } 
    } 
} 

희망.

+0

아마도 이것은 가능한 좋은 해결책 일 것입니다. 감사. – Sean

0

지도를,하지만 당신은 내가 과거에 엔티티 프레임 워크와 비슷한 경험 한 기본 키

+0

복잡한 유형을 살펴 보 겠지만 기본 키로 사용할 수 없다면 목적을 이길 수 없습니다. – Sean