2013-12-17 10 views
3

Entity Framework 6 Code First를 통해 newid()를 사용하여 SQL 데이터베이스에서 테이블의 기본 키 기본값을 설정하려고합니다. 내가이이 코드를 통해 수행도 How to set NewId() for GUID in entity frameworknewid() with Entity Framework 6 코드 우선

하지만처럼 유래에 대한 몇 가지 방법을 찾을 방법을 알고 : 나는 백업 /하지 객체를 통해 있었으나 결국 데이터베이스에 부푼로 데이터를 삽입 메커니즘을 복원해야합니다. 따라서 Entity Framework는 여기에 사용되지 않습니다. 즉, GUID가 null 인 행이 SQL 데이터베이스에 삽입되어 실패합니다.

이 주석

[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public Nullable<Guid> Entity_OID { get; set; } 

을 추가 할 수 있습니다 그리고이 성공적으로는보다 높은 새 GUID를 추가() NEWID (와 유사한 일을 기본 값으로 NEWSEQUENTIALID()를 추가합니다 최근 guids, 그래서 당신은 입력에서 순서가 있기 때문에 성능을 이길). 그러나 EF없이 이미 존재하는 데이터베이스이기 때문에 가능한 한 적은 변경을하고 싶습니다. 그래서 나는 NEWSEQUENTIALID()에 만족하지 않습니다. 나는 그것이 여전히 newid()라면 오히려 그것을 좋아할 것이다. 그러나 Entity Framework 6 Code First에서 newid()에 대한 Annotation/Mapping을 찾지 못했습니다. 그리고 설계 상 데이터베이스에 대한 모든 변경 사항은 코드를 통해 수행되어야합니다. 누구든지 코드를 통해 행에 newid() 기본값을 추가하는 방법을 알고 있습니까? 사전에

감사합니다!

+0

자동 생성 키를 사용하지 않고 ctor의 키 값을 설정할 수 없습니까? GUID는 고유 한 것으로 보장되므로 데이터베이스 나 코드에 의해 생성되는지 여부는 중요하지 않으며 두 GUID에 대해 동일한 GUID가 생성되는 상황에 빠지지 않아야합니다 (다시 말하면 GUID는 globaly로 간주되기 때문입니다). 고유) – Pawel

+0

예 저는이를 수행 할 수 있습니다. 이것은 Buisness Logic을 통해 작성된 엔티티에서 작동합니다. 그러나 엔티티가 생성되지 않은 스트림을 통해 cbak 파일에서 복원하면 데이터베이스가 생성해야합니다. –

답변

2

내가 시도한 코드 첫 번째 코드에서 가능하지 않은 것 같습니다. 그리고

[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
public Nullable<Guid> Entity_OID { get; set; } 

엔티티 프레임 워크는 내가 전에 context.SaveChanges() 내가 예상되는 동작하지 않은로 설정 한 경우에도, 새 GUID를 생성합니다.

0

DatabaseGeneratedOption.Identity로 속성을 표시하면 EF는 모든 삽입 작업 후에 DB에서 생성 된 값을 가져와 속성으로 설정합니다. DB에서 newid()라는 기본 제약 조건을 만드는 것과 같은 모든 작업을 수행 할 수 있습니다.