2

私は EF6 アルファを使用しており、新しい機能を使用してストアド プロシージャにマップしています。単体テストで、「プロシージャまたは関数 CreateDayDetail に指定された引数が多すぎます」というエラーが表示されます。

SQL プロファイラーには、次の proc 呼び出しが表示されます。

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

問題は、自動生成される @TemplateDay_Key パラメータです。しかし、ActivityType 用に作成されていないのに、なぜ作成されているのかわかりません。

エンティティクラスは次のとおりです。

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 は次のとおりです。

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")));

私は今日、あまりにも長い間これを見てきました。助けていただければ幸いです.......

4

2 に答える 2

0

3ヶ月前の質問...

モデルで外部キーなしで関係を使用しているため、そこにあります。データベースではなくモデルでリレーションシップを作成しています。

あなたは使用していません:.HasForeignKey(d => d.TemplateDayKey_ID);

使用して.Map(d => d.MapKey("TemplateDayKey"));おり、この関係を処理するためのパラメータとしてストアド プロシージャを挿入および更新するには、この関係情報を渡す必要があります。

モデルで ForeignKey ベースの関係を使用する場合、ストアド プロシージャのパラメーター リストにパラメーター TemplateDayKey_id が表示されます。

于 2013-09-10T12:32:43.137 に答える