2013-05-26 3 views
1

저는 EF6 알파를 사용하고 새로운 기능을 사용하여 저장 프로 시저에 매핑합니다. 내 단위 테스트에서 "프로 시저 또는 함수 CreateDayDetail에 인수가 너무 많습니다."라는 오류 메시지가 나타납니다.저장 프로 시저에 매핑 된 EF6이있는 매개 변수가 너무 많습니다.

SQL 프로파일은 다음 시저 호출을 보여줍니다

exec [Schedule].[CreateDayDetail] @startTime=0,@duration=1,@durationEst=0,@isPaid=1,@requirePunch=0,@dayKey=16,@activityTypeKey=1,@TemplateDay_Key=NULL 

문제는 자동으로 생성되고있는 @TemplateDay_Key 매개 변수입니다. 그러나 ActivityType을 만들지 않을 때 왜 생성되는지는 잘 모르겠습니다.

typeConfig.ToTable("Schedule.DayDetail"); 
typeConfig.Property(d => d.Key) 
    .HasColumnName("DayDetailKey"); 
typeConfig.HasRequired(d => d.Day) 
    .WithMany() 
    .Map(d => d.MapKey("TemplateDayKey")); 
typeConfig.HasRequired(d => d.Activity) 
    .WithMany() 
    .Map(d => d.MapKey("ActivityTypeKey")); 

typeConfig.MapToStoredProcedures(sp => 
    sp.Insert(i => i.HasName("Schedule.CreateDayDetail") 
     .Parameter(d => d.Day.Key, "dayKey") 
     .Parameter(d => d.Activity.Key, "activityTypeKey") 
     .Parameter(d => d.StartTime, "startTime") 
     .Parameter(d => d.Duration, "duration") 
     .Parameter(d => d.DurationEstimated, "durationEst") 
     .Parameter(d => d.IsPaid, "isPaid") 
     .Parameter(d => d.RequirePunch, "requirePunch")) 
    .Update(u => u.HasName("Schedule.UpdateDayDetail") 
     .Parameter(d => d.Key, "key") 
     .Parameter(d => d.Day.Key, "dayKey") 
     .Parameter(d => d.Activity.Key, "activityTypeKey") 
     .Parameter(d => d.StartTime, "startTime") 
     .Parameter(d => d.Duration, "duration") 
     .Parameter(d => d.DurationEstimated, "durationEst") 
     .Parameter(d => d.IsPaid, "isPaid") 
     .Parameter(d => d.RequirePunch, "requirePunch") 
     .Parameter(d => d.Version, "version")) 
    .Delete(x => x.HasName("Schedule.DeleteDayDetail") 
     .Parameter(d => d.Key, "key") 
     .Parameter(d => d.Day.Key, "dayKey") 
     .Parameter(d => d.Activity.Key, "activityTypeKey") 
     .Parameter(d => d.Version, "version"))); 

내가 너무 오래 오늘이 검토 한 결과 다음과 같습니다

public class DayDetail 
{ 
    [Key] 
    public int Key { get; set; } 

    [Required] 
    public TemplateDay Day { get; set; } 

    [Required] 
    public ActivityType Activity { get; set; } 

    [Range(TimeMinimum, TimeMaximum)] 
    public int StartTime { get; set; } 

    [Range(DurationMinimum, DurationMaximum)] 
    public int Duration { get; set; } 

    public bool DurationEstimated { get; set; } 

    public bool IsPaid { get; set; } 

    public bool RequirePunch { get; set; } 

    [Timestamp] 
    public byte[] Version { get; set; } 
} 

내가 모델을 구성하는 데 사용하고 유창 API입니다 : 여기

는 엔티티 클래스입니다 . 내가 어떤 도움을 주셔서 감사합니다 .......

답변

0

3 개월 질문 ... 당신이 모델의 외래 키없이 관계를 사용하고 있기 때문에이

. 데이터베이스가 아닌 모델에서 관계를 작성 중입니다. 당신은 .Map(d => d.MapKey("TemplateDayKey"));을 사용하는 .HasForeignKey(d => d.TemplateDayKey_ID);

이 삽입 및 업데이트가이 관계를 처리하는 매개 변수로 저장 프로 시저를이 관련 정보를 전달하는 데 필요합니다

당신은 사용하고 있지 않습니다.

모델에서 ForeignKey 기반 관계를 사용하는 경우 저장 프로 시저 매개 변수 목록에 TemplateDayKey_id 매개 변수가 표시됩니다.

관련 문제