質問: "画像以外はアップロードできません。" End If ' 入力元のフォームに結果を表示 Return View() End Function End Class End Namespace ``` モデルファイルです。(Photo.vb) ``` Imports System Imports System.ComponentModel Imports System.ComponentModel.DataAnnotations Public Class Photo Public Property Id As Integer Public Property Name As String Public Property Mime As String Public Property Data As IList(Of HttpPostedFileBase) End Class ``` コンテキストファイルです。(MyMvcContext.vb) ``` Imports System.Data.Entity Imports Upload Public Class MyMvcContext : Inherits DbContext Public Property Tweets As DbSet(Of Photo) ' Tweetsテーブル End Class ``` ### 試したこと エラー発生箇所となっているAddObjectは、_dbに対してのメソッドであり、_dbは(数行前に宣言している)MyMvcContextのインスタンスなので、 MyMvcContextに何かしら問題があるのでは?と考えてみましたが、その先がわかりません。 ### 補足情報(FW/ツールのバージョンなど) 統合開発環境 Visual Studio2019 (言語:VB.NET、プロジェクトテンプレート:ASP.NET Webアプリケーション MVC) MVCフレームワークのバージョン 5.2.7 使用PC Windows10 ※平日は仕事のため、返信が19:30以降になります。(22時以降は返信が翌日になることが多いです) ※休日の返信は不定期です。 申し訳ございませんが、どうぞよろしくお願いします。
回答: いろいろ分かってなくて迷走している感じで、先は長そうですがとりあえず説明します。 今回参考にしている @IT の記事は、既存の SQL Server データベースがあって、それから DB First でコンテキストクラスとエンティティクラスを生成し、それを使ってファイルを保存しています。また、記事が古くて、生成されるコンテキストクラスは ObjectContext クラス(DbContext クラスではなくて)を継承しているようです。 まずそのあたりに着目して、自分の書いているコードは何が問題なのかを、時間がかかるかもしれませんが、基本的なことなので理解できるまでよく考えてください。 まず、エラーメッセージ、 > > 'AddObject'は'MyMvcContext'のメンバーではありません。 > > > ・・・ですが、質問者さんの書いた MyMvcContext.vb の MyMvcContext クラスは DbContext クラスを継承していますが、それには AddObject メソッドはないということでエラーになってます。 昔は DB First でコンテキストクラスを生成すると、デフォルトでは ObjectContext クラスを継承しました。ObjectContext クラスには AddObject メソッドが含まれます。@IT の記事はそれを使っているようです。 ObjectContext.AddObject(String, Object) メソッド もう一つ、もっと根本的な問題ですが、質問者さんは DB First と Code First でのコンテキストクラス / エンティティクラスの作り方の違いが分かってないようです。 今回参考にしている @IT の記事は DB First です。そのようにしたいのであれば、まず SQL Server に @IT の記事のスキーマのデータベースを作ってください。そして、Visual Studio の ADO.NET Entity Data Model ウィザードを使って、その DB から EDM を作成します。 具体例は下の記事のステップ (2) ~ (10) を見てください。 スキャフォールディング機能 これで以下の画像のようなコンテキストクラスと、 !イメージ説明 DB のテーブルの数だけエンティティクラスが自動的に生成されます。(下の画像は Employees の例。赤枠で囲った Photo が画像データを保存するものです) !イメージ説明 これを利用して、アクションメソッドでは以下のようにして DB に保存できるはずです。 ``` private NORTHWINDEntities db = new NORTHWINDEntities(); db.Employees.Add(<画像を含む enployee モデル>); db.SaveChanges(); ```