2011-07-03 11 views
20

EF 코드를 먼저 데이터베이스의 첫 번째 방법으로 사용하고 있습니다. "with Database.SetInitializer (null);"EF 코드 첫 번째 읽기 전용 열

내 테이블에는 createddate 및 amendddate라는 두 개의 열이 있습니다. 트리거를 사용하여 SQL Server에서 관리합니다. 데이터 입력이 발생하면 이러한 열은 트리거를 통해 데이터를 가져옵니다.

지금 내가하고 싶은 것은 EF 코드의 첫 번째 관점에서만 읽는 것입니다. 나는. 내 앱에서 createddate 및 ameneded 날짜를 볼 수 있기를 원하지만이 데이터를 수정하고 싶지 않습니다.

setter에서 개인 수식어를 사용했지만 행운을 보지 못했습니다. 테이블에 새 데이터를 추가하려고하면 SQL Server에서 오류를 throw하는 데이터베이스에 DateTime.Max 날짜를 입력하려고했습니다.

아이디어가 있으십니까?

답변

32

EF 자체에서 엔티티를로드 할 때 속성을 설정해야하며 코드 퍼스트는 속성에 공용 설정자가있는 경우에만이 작업을 수행 할 수 있기 때문에 개인 수식어를 사용할 수 없습니다 (개인 설정자가 가능한 EDMX와 달리 (1), (2)) .

CreatedDateDatabaseGeneratedOption.Identity으로, AmendDateDatabaseGeneratedOption.Computed으로 표시해야합니다. 이렇게하면 EF가 데이터베이스에서 데이터를 올바르게로드하고, 삽입 또는 업데이트 후에 데이터를 다시로드하여 애플리케이션에서 엔티티가 최신 상태가되도록하는 동시에 애플리케이션의 값을 변경할 수 없도록합니다. 응용 프로그램이 절대로 데이터베이스로 전달되지 않습니다. 객체 지향 관점에서 볼 때 매우 좋은 솔루션은 아니지만 기능면에서 볼 때 원하는 것입니다.

당신은 데이터 주석과 중 하나를 수행 할 수 있습니다

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public DateTime CreatedDate { get; set; } 
[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
public DateTime AmendDate { get; set; } 

또는 파생 된 상황에서 OnModelCreating 재정에 능통 API와 함께 : 빠른 응답을위한

modelBuilder.Entity<YourEntity>() 
      .Property(e => e.CreatedDate) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
modelBuilder.Entity<YourEntity>() 
      .Property(e => e.AmendDate) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 
+0

감사합니다. DatabaseGeneratedOption.Identity와 DatabaseGeneratedOption.Computed의 차이점은 무엇입니까? 나는 이것에 관해 웹에서 많은 세부 사항을 발견하는 것 같다. thx 편집 : 내 대답을 가지고 해달라고 대답 : http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.databasegeneratedoption(v=vs.103).aspx. 나는 그것이 많은 감사가 어떻게되는지 알려줄거야 – daehaai

+0

그게 문제를 해결했습니다. 많은 감사합니다 – daehaai

+0

내가 [업데이트 - 데이터베이스 : CreatedDate 속성에 대한 DatebaseGenerated (DatabaseGeneratedOption.Identity)] 특성을 가져 왔는데 'CreatedDate'ID 유형이 int, bigint, smallint, tinyint 또는 10 진수이거나 숫자 여야합니다. 0의 스케일을 가지고, 에 제약을 가하면 null이 될 수 없다. – koraytaylan

관련 문제