0

ビデオに行を追加し、その同じ ID をビデオの物理ファイル名として使用したいと考えています。そのため、ファイル名なしで行を追加し、取得した ID を使用して、その行をファイル名で更新する必要があります。私は今、それを行う方法を確信しています。

    public ActionResult UpVideo(Report Report, string VideoName, HttpPostedFileBase file)
    {
        Video v = new Video();
        v.Name = VideoName;
        v.Report = Report;
        db.Videos.Add(v);

        var filename = v.ID + "." + Path.GetExtension(file.FileName);
        var path = Path.Combine(Server.MapPath("~/App_Data/video_uploads"), filename);
        file.SaveAs(path);

        v.FileName = filename;

        //** update Row here with filename

        db.SaveChanges();


        //** redirect back to Report Details (need to figure out how do do this too)
        return RedirectToAction(Report);
    }
4

1 に答える 1

1

データベースに ID の自動インクリメント主キーがあると仮定すると、ID プロパティを参照する前に変更の保存を呼び出す必要があります。ID を割り当てることができるように、エンティティをデータベースに保存する必要があります。

public ActionResult UpVideo(Report Report, string VideoName, HttpPostedFileBase file)
    {
        Video v = new Video();
        v.Name = VideoName;
        v.Report = Report;
        db.Videos.Add(v);
        db.SaveChanges();

        var filename = v.ID + "." + Path.GetExtension(file.FileName);
        var path = Path.Combine(Server.MapPath("~/App_Data/video_uploads"), filename);
        file.SaveAs(path);

        v.FileName = filename;
        db.SaveChanges();   


        //** redirect back to Report Details (need to figure out how do do this too)
        return RedirectToAction(Report);
    }

「ファイル名」は ID とファイル拡張子の組み合わせにすぎないため、ビデオを参照する必要がある場合は、ファイル拡張子を保存して連結を実行しないでください。これにより、データベースへの呼び出しが 1 回に減り、DB ストレージを少し節約できます。

public ActionResult UpVideo(Report Report, string VideoName, HttpPostedFileBase file)
    {
        Video v = new Video();
        v.Name = VideoName;
        v.FileName = Path.GetExtension(file.FileName);
        v.Report = Report;
        db.Videos.Add(v);
        db.SaveChanges();

        var filename = v.ID + "." + v.FileName;
        var path = Path.Combine(Server.MapPath("~/App_Data/video_uploads"), filename);
        file.SaveAs(path);


        //** redirect back to Report Details (need to figure out how do do this too)
        return RedirectToAction(Report);
    }
于 2013-07-25T21:43:04.800 に答える