[SQL] 엔티티 프레임 워크 수동으로 키를 입력
SQL엔티티 프레임 워크 수동으로 키를 입력
나는 간단한 데이터베이스 프로젝트에 대한 첫 번째 엔티티 프레임 워크 코드를 사용하려고 해요 그리고 내가 간단하게 알아낼 수없는 문제로 실행합니다.
나는 EF 완전히 내가 그 필드에 수동으로 입력 한 값을 무시하고, 자동으로 1마다 증가 내 테이블에 대한 ID를 설정 알게되었다. 일부 검색 후에는이 동작을 해제하는 올바른 방법이하고있는 것을 나의 이해는 다음과 같습니다
modelBuilder.Entity<Event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
그러나 지금은 그냥이 오류가 그리고 난 아무 생각도 이유가 없다 :
것이 도움이 있다면, 여기에 문제의 POCO 클래스입니다 :
public class Event
{
[Key, Required]
public int EventID { get; set; }
public string EventType { get; set; } //TODO: Event Type Table later on
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public virtual ICollection<Match> Matches { get; set; }
public virtual ICollection<EventParticipation> EventParticipation { get; set; }
}
미리 감사드립니다.
해결법
-
==============================
1.기본적으로 엔티티 프레임 워크는 정수 기본 키 데이터베이스 생성 (속성 HasDatabaseGeneratedOption (DatabaseGeneratedOption.Identity)를 추가하거나 속성을 호출하는 것과 같습니다 있다고 가정합니다 (예 => e.EventID) .HasDatabaseGeneratedOption (DatabaseGeneratedOption.Identity)하며 유창함 API한다.
기본적으로 엔티티 프레임 워크는 정수 기본 키 데이터베이스 생성 (속성 HasDatabaseGeneratedOption (DatabaseGeneratedOption.Identity)를 추가하거나 속성을 호출하는 것과 같습니다 있다고 가정합니다 (예 => e.EventID) .HasDatabaseGeneratedOption (DatabaseGeneratedOption.Identity)하며 유창함 API한다.
당신은 당신이 볼 수 테이블을 생성하는 마이그레이션을 보면 :
CreateTable( "dbo.Events", c => new { EventID = c.Int(nullable: false, identity: true), //etc }) .PrimaryKey(t => t.EventID );
그럼 당신은 DatabaseGenerated.None에 유창함 API를 사용하여 모델을 변경. EF는 마이그레이션이를두고 :
AlterColumn("dbo.Events", "EventID", c => c.Int(nullable: false, identity: false))
그리고 생성 된 SQL이 있습니다 :
ALTER TABLE [dbo가]. [이벤트] ALTER COLUMN에 [이벤트 ID] [INT] NOT NULL
어떤 실제로 diddly 쪼그리고 않습니다. 열에서 IDENTITY를 제거하면 사소한 없습니다. 그런 다음 데이터를 복사 및 외래 키를 수정해야 테이블을 삭제하고 다시 만들거나 새 열을 작성해야합니다. EF 당신을 위해 그 일을하지 않는 것은 놀라운 일이 아니다 그래서.
당신은 최고의 자신을 위해 그것을 어떻게 해결해야합니다. 당신은 당신이 DatabaseGeneratedOption.None 지정했는지 지금은 처음부터 0 다시 비계로 마이그레이션을 롤백 할 수 있습니다, 또는 당신은 테이블을 삭제하고 다시 수동으로 마이그레이션을 변경할 수 있습니다.
또는 당신은 삭제하고 열을 다시 만들 수 있습니다 :
DropColumn("Customer", "CustomerId"); AddColumn("Customer", "CustomerId", c => c.Long(nullable: false, identity: false));
편집하다 또는 사용자 정의 마이그레이션 작업을 통해 신원 온 / 오프 스위치 수
-
==============================
2.나는 속성, 완성도를 위해서 여기에 대안을 선호하기 때문에 :
나는 속성, 완성도를 위해서 여기에 대안을 선호하기 때문에 :
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int Id { get; set; }
참고 :이 EF 코어도 작동합니다.
from https://stackoverflow.com/questions/18907411/entering-keys-manually-with-entity-framework by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] VARCHAR2와 문자 사이의 주요 차이점은 무엇입니까 (0) | 2020.03.17 |
---|---|
[SQL] 오라클 SQL 쿼리 : 시간을 기준으로 그룹 별 최신 값을 검색 [중복] (0) | 2020.03.16 |
[SQL] 한 행에 여러 행을 집계 오라클 SQL 쿼리가 있습니까? [복제] (0) | 2020.03.16 |
[SQL] SQL 구문의 경우 민감한인가? (0) | 2020.03.16 |
[SQL] 어떻게 된 PreparedStatement의 SQL을받을 수 있나요? (0) | 2020.03.16 |