2017-12-27 3 views
0

유창한 매핑과 함께 Entity Framework를 사용하고 있습니다.유창한 매핑을 사용하는 동안 엔티티 유형에 키 정의 오류가 없습니다. Entity Framework

내 응용 프로그램에서 키가없는보기에서 데이터를 가져 오려고합니다.

Entity Type has no key defined, Define a key for this entity type

내가 데이터를 가져올 수 :

내가 유창 API를 내가 방법을 테스트했을 때보기

에서 데이터를 가져 오기하는 방법에 대한 엔티티 매핑을 작성했습니다

는 오류가 발생합니다 유창한 Entity Framework를 사용하여 키가없는보기 아래 난 단지 읽기 권한이,이 매핑 ​​클래스

public class WeatherDataMap : EntityTypeConfiguration<WeatherData> 
{ 
    public WeatherDataMap() : base() 
    { 
     this.ToTable("dbo.vw_WeatherData"); 
    } 
} 

내가보기를 변경할 수있는 엔티티 클래스

public class WeatherData : BaseModel 
{ 
    public DateTime ReportDateTime { get; set; } 
    public string VendorName { get; set; } 
    public string WeatherTypeCd { get; set; } 
    public string WeatherStationCd { get; set; } 
    public DateTime WeatherDate { get; set; } 
    public int Interval { get; set; } 
    public string IntervalTypeCd { get; set; } 
    public string WeatherValueTypeCd { get; set; } 
    public decimal ValueMax { get; set; } 
    public decimal ValueMin { get; set; } 
    public decimal ValueAvg { get; set; } 
    public string Unit { get; set; } 
    public int DegreeDayBase { get; set; } 
    public string UpdateUser { get; set; } 
    public DateTime UpdateDt { get; set; } 
    public int VendorId { get; set; } 
    public int WeatherStationId { get; set; } 
    public int WeatherTypeId { get; set; } 
    public int IntervalTypeId { get; set; } 
    public int WeatherValueTypeId { get; set; } 
} 

입니다.

+1

*이 엔티티 유형에 대한 키 정의 * 꽤 명확하지 않습니까? 코드를 게시하는 데 도움이 더 필요하면. –

+0

코드가 없기 때문에 이것을 닫기위한 투표. – DavidG

+0

EF 용 Table이나 View에는 아무런 차이가 없습니다. 어쨌든 '[Key]'로 하나의 고유 한 소품을 장식 할 수 있습니다. https://stackoverflow.com/questions/20203492/entitytype-has-no-key-defined- 오류 – Aria

답변

1

테이블 또는 뷰에 기본 키가 없지만 모델에 PK이 있어야한다는 예외는 없으므로 EF-Code First 설명서에 키 하나 이상의 열에 PK 키를 정의 할 수 있다고 나와 있습니다.

public partial class WeatherData : BaseModel 
{ 
    [Key] 
    [Column(Order = 0)] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int VendorId { get; set; } 

    [Key] 
    [Column(Order = 1)] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int WeatherStationId { get; set; } 

    [Key] 
    [Column(Order = 2)] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int IntervalTypeId { get; set; } 

    [StringLength(50)] 
    public string VendorName { get; set; } 

    [StringLength(50)] 
    public string WeatherTypeCd { get; set; } 
} 

당신이 주요 매개 변수이 주문을 받아해야 DbSetFind 방법을 사용하려면 다음과 같이 또는 1 열 모델이 될 수 있도록.

그러나 POCO 또는 마법사로 EF 코드 첫 번째 모델을 생성하는 경우 EF는 위의 모델에서 볼 수있는 것처럼 기본 키로 모든 int 열을 정의하지만 키로 하나의 소품을 정의 할 수 있지만 당신이 키로 정의한 중복 된 필드가 없으면 다른 컬럼을 기본 키로 결합해야합니다.

다른 방법은 컨텍스트의 OnModelCreating에 다음 코드와 같이 키를 정의하는 데 Fluent API를 사용하는 것입니다.

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<WeatherData>().Property(a => a.VendorId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
     modelBuilder.Entity<WeatherData>().Property(a => a.WeatherStationId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
     modelBuilder.Entity<WeatherData>().HasKey(w => new 
     { 
      w.VendorId, 
      w.WeatherStationId 
     }); 
    } 
관련 문제