복붙노트

[SQL] 엔티티 프레임 워크의 기본 키와 같은 문자열 속성을 사용하는 방법

SQL

엔티티 프레임 워크의 기본 키와 같은 문자열 속성을 사용하는 방법

나는 EF에 새로 온 사람과 ETF6.0 코드 첫 번째 방법으로 내 첫 번째 단계를 수행하려고 지금은 문제가있다.

나는 속성이

[Key]
public string FooId { get; set; }

이는 모델에 대한 내 기본 키입니다.

하지만이를 실행하는 경우

패키지 관리자 콘솔의 명령은 내가 다음과 같은 오류가 데이터베이스로 마이그레이션을 보류 업데이트 :

나는 내 모델의 PK를 변경하는 경우

[Key]
public int FooId { get; set; } 

모든 것이 잘 작동합니다.

그러나 나는 절대적하게 내 경우시키는 Sens 때문에 문자열 형식이 될하기 위해 PK가 필요합니다. 나는 단점이 있습니다 알고 있지만 나에게 필요가있다.

내가 엔티티 프레임 워크의 기본 키로 문자열을 만들려면 여기에 이전 게시물을 보았다!

그러나 그것은 내 문제를 해결하지 보인다 또는 난 그냥 그것을 이해하지 않습니다.

그것은 내가 SQL 데이터베이스에 PK로 문자열을 사용할 수 없다는 정말?

또는 그렇게하는 방법은 무엇입니까?

해결법

  1. ==============================

    1.이것은 신원 자동 증가를 사용할 수없는 PK를 만드는 올바른 방법입니다 :

    이것은 신원 자동 증가를 사용할 수없는 PK를 만드는 올바른 방법입니다 :

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public string FooId { get; set; }
    
  2. ==============================

    2.당신이 문자열로 기본 키가 필요한 경우, 다음 ID 열하지 않습니다. 신원 열은 값을 직접 생성하려는 경우 당신이 꺼질 당신을 위해 기본 키 값을 생성합니다.

    당신이 문자열로 기본 키가 필요한 경우, 다음 ID 열하지 않습니다. 신원 열은 값을 직접 생성하려는 경우 당신이 꺼질 당신을 위해 기본 키 값을 생성합니다.

  3. ==============================

    3.기본 키로 문자열을 가지고하는 이유는 무엇입니까?

    기본 키로 문자열을 가지고하는 이유는 무엇입니까?

    난 그냥 자동 증가 정수 필드 기본 키를 설정하고, 문자열 필드에 인덱스를 넣어 것입니다.

    그런 식으로 당신은 그들이 상대적으로 빠른해야 테이블에 검색을 수행하고, 조인 및 정상적인 모습 올린다는 자신의 속도에 영향을받지 않습니다 당신의 모든합니다.

    또한 색인을 가져옵니다 문자열 필드의 양을 제어 할 수 있습니다. 당신이 충분히 될 것이라고 생각하는 경우 즉, "오직 인덱스 처음 5 자"를 말할 수 있습니다. 또는 데이터가 상대적으로 유사 할 수 있다면, 인덱스 전체 필드를 할 수 있습니다.

  4. ==============================

    4.자신의 실체를 변경하고자하지 다른 사람에 대한 또 다른 가능한 대답은 DbContext을 말하고있다 :

    자신의 실체를 변경하고자하지 다른 사람에 대한 또 다른 가능한 대답은 DbContext을 말하고있다 :

      builder.Entity<Food>(b =>
      {
           b.Property(u => u.FooId).HasDefaultValueSql("newsequentialid()");
      });
    

    이는 식품 모델은 FoodId라는 ID를 가지고있는 DbContext을 말할 것이다 그것은 것 ID 생성을 필요로한다.

    EF 코어 기본값 : MSDN

  5. from https://stackoverflow.com/questions/32983524/how-to-use-string-property-as-primary-key-in-entity-framework by cc-by-sa and MIT license