先日、
https://teratail.com/questions/275580
の質問をさせていただいた者ですが、
今回は、アップロードしたファイルをデータベースに登録する処理の実装を試みております。
前提・実現したいこと
アップロードしたファイルをデータベースに保存する機能を実装したいです。
前回同様、以下のサイトを参考にほぼそのまま書いているのですが、表題のようなエラーが発生しております。
https://www.atmarkit.co.jp/fdotnet/dotnettips/939aspmvcfileupload2/aspmvcfileupload2.html
発生している問題・エラーメッセージ
実行前の段階で、UploadController.vbのファイル内の「_db.AddObject("Photo", ph)」の箇所で、
以下のエラーが発生しております。
'AddObject'は'MyMvcContext'のメンバーではありません。
該当のソースコード
※Viewファイルです。(Index.vbhtml)※bodyタグの中身のみ記載
※参考サイトでは、<% %>のような記法で書かれておりますが、ところどころエラーが発生しましたので、書き直しています。
VisualBasic
1@Code 2 ViewData("Title") = "Index" 3End Code 4 5<h2>Index</h2> 6 7<div> 8 @Using (Html.BeginForm("DbUpload", "Upload", FormMethod.Post, New With {.enctype = "multipart/form-data"})) 9 @<input type="file" name="fl" size="50" /> 10 @<input type="submit" value="送信" /> 11 End Using 12 13 @ViewData("msg") 14 15</div>
※コントローラファイルです。(UploadController.vb)
VisualBasic
1Imports System.Web.Mvc 2Imports System.IO 3 4Namespace Controllers 5 Public Class UploadController 6 Inherits Controller 7 8 ' GET: Upload 9 Function Index() As ActionResult 10 Return View() 11 End Function 12 13 14 ' アップロード処理を行うUpload/Indexアクション 15 '(HTTP POSTによる実行) 16 <AcceptVerbs(HttpVerbs.Post)> 17 Function Index(ByVal fl As HttpPostedFileBase) As ActionResult 18 19 ' コンテンツ・タイプが"image/*"であるか(画像ファイルか) 20 ' をチェック 21 If fl.ContentType.StartsWith("image/") Then 22 23 ' アップロード先のパスを生成 24 Dim upfile As String = Server.MapPath("~/App_Data/Uploaded/") _ 25 & Path.GetFileName(fl.FileName) 26 27 ' 同名のファイルが存在する場合はエラー 28 If System.IO.File.Exists(upfile) Then 29 ViewData("msg") = "同名のファイルが存在します。" 30 Else 31 ' 画像ファイルで同名のファイルが存在しない場合は保存処理 32 fl.SaveAs(upfile) 33 ViewData("msg") = String.Format( 34 "{0}をアップロードしました。", fl.FileName) 35 End If 36 Else 37 ' 画像ファイルでない場合はエラー 38 ViewData("msg") = "画像以外はアップロードできません。" 39 End If 40 ' 入力元のフォームに結果を表示 41 Return View() 42 End Function 43 44 45 ' アップロード・フォームを生成するUpload/DbUploadアクション 46 Function DbUpload() As ActionResult 47 Return View() 48 End Function 49 50 ' アップロード処理を行うUpload/DbUploadアクション 51 ' (HTTP POSTによる実行) 52 <AcceptVerbs(HttpVerbs.Post)> 53 Function DbUpload(ByVal fl As HttpPostedFileBase) As ActionResult 54 55 ' コンテンツ・タイプが"image/*"であるか(画像ファイルか)を 56 ' チェック 57 If fl.ContentType.StartsWith("image/") Then 58 59 ' EDMのコンテキスト・オブジェクトを生成 60 Dim _db As New MyMvcContext() 61 62 ' エンティティにアップロード・ファイルの情報をセット 63 Dim ph As New Photo() 64 ph.Name = Path.GetFileName(fl.FileName) ' ファイル名 65 ph.Mime = fl.ContentType ' コンテンツ・タイプ 66 67 Dim data(fl.ContentLength) As Byte 68 fl.InputStream.Read(data, 0, fl.ContentLength) 69 ph.Data = data ' データ本体 70 71 ' エンティティを追加&データソースに反映 72 _db.AddObject("Photo", ph) 73 _db.SaveChanges() 74 ViewData("msg") = String.Format( 75 "{0}をアップロードしました。", fl.FileName) 76 Else 77 ' 画像ファイルでない場合はエラー 78 ViewData("msg") = "画像以外はアップロードできません。" 79 End If 80 ' 入力元のフォームに結果を表示 81 Return View() 82 End Function 83 84 85 End Class 86End Namespace
モデルファイルです。(Photo.vb)
VisualBasic
1Imports System 2Imports System.ComponentModel 3Imports System.ComponentModel.DataAnnotations 4 5Public Class Photo 6 7 Public Property Id As Integer 8 9 Public Property Name As String 10 11 Public Property Mime As String 12 13 Public Property Data As IList(Of HttpPostedFileBase) 14 15End Class
コンテキストファイルです。(MyMvcContext.vb)
VisualBasic
1Imports System.Data.Entity 2Imports Upload 3 4Public Class MyMvcContext : Inherits DbContext 5 Public Property Tweets As DbSet(Of Photo) ' Tweetsテーブル 6End Class
試したこと
エラー発生箇所となっているAddObjectは、_dbに対してのメソッドであり、_dbは(数行前に宣言している)MyMvcContextのインスタンスなので、
MyMvcContextに何かしら問題があるのでは?と考えてみましたが、その先がわかりません。
補足情報(FW/ツールのバージョンなど)
統合開発環境
Visual Studio2019
(言語:VB.NET、プロジェクトテンプレート:ASP.NET Webアプリケーション MVC)
MVCフレームワークのバージョン
5.2.7
使用PC
Windows10
※平日は仕事のため、返信が19:30以降になります。(22時以降は返信が翌日になることが多いです)
※休日の返信は不定期です。
申し訳ございませんが、どうぞよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー