3

ASP.NET MVC 3 イントラネット プロジェクトにコントローラーを追加しようとすると、以下のエラーが発生します。

オブジェクト参照がオブジェクトのインスタンスに設定されていません

SignalR アプリケーションを開発するために、記事http://sumitmaitra.wordpress.com/2011/11/13/fun-with-signalr/に従っています。

SignalR をインストールした後に何か問題が発生したとは思えませんが、それについてはよくわかりません。

編集

モデルコード:

public class BlogPost
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Title { get; set; }
    public string Post { get; set;}
}

Dbコンテキスト:

namespace SignalR.Models
{
    public class BlogPostContext : DbContext
    {
        public DbSet<BlogPost> BlogPosts { get; set; }
    }
}

コントローラ:

コントローラ

4

2 に答える 2

2

@Benjamin - その優れた詳細な返信をありがとう。私は Entity Framework Code First を使用しており、システムに SQLEXPRESS がインストールされていると想定していたので、おそらくここでの問題です。

でも詳しい説明ありがとうございます。プラモドを助けたようです。

@Pramodtech - ベンジャミンからの提案のどれが役に立ったか教えていただければ、記事を更新してより明確にします。

私は、人々がコードをダウンロードして、それを使って発砲するだろうと思っていました:)。

これは実際には「コメント」セクションに属していますが、まだコメントするのに十分な担当者がいないため、回答として投稿して申し訳ありません.

于 2012-01-05T17:26:02.883 に答える
1

SignalR については何も知りませんが、null オブジェクトのプロパティの HTML をレンダリングしようとするビューに問題があると確信しています。

記事をざっと読んだところ、データを格納する実際のデータベースへの参照が見られず、コードからデータベースを生成するためのコードが提供されていませんでした (また、投稿の作成者は、既存のデータベースに接続するかどうかについて明確ではありません)または生成します)。

コードを既存のデータベースにマッピングする例については、こちらを参照してください。

既存のデータベースがない場合は、Entity Framework コードにデータベースを生成するように指示する必要があります。この記事では、その方法を説明します(必要なものは記事の下部にあります)。

ここで、エンティティ クラスを設定した方法を見て、2 つの記事で説明したことをまだ行っていないと仮定すると、Entity Framework は自動的にデータベースを作成するはずです (これは既定の動作です - よくわかりません)。ただし、SQL Server Express 以降がインストールされていない場合はどうなりますか)。SQL サーバー インスタンスにデータベースがあるかどうかを確認しましたか? これはBlogPostContextと呼ばれる必要があります。これにいくつかのデータを入力すると、動作するはずです。

では、なぜこの問題が発生するのでしょうか。現時点では、あなたはどちらかを持っています

  1. データベースなし、または
  2. データのないデータベース。

これは、コントローラーが次のいずれかであることを意味します

  1. 存在しないものからデータをリクエストする、または
  2. 空のデータベースからのデータのリクエスト

両方のシナリオから返される結果は、null オブジェクトです。この null オブジェクトはビューに渡され、ビューは null オブジェクトを反復処理して例外を生成しようとします。

これは 2 つの方法で確認できます。

  1. ビューで null オブジェクトを確認し、null チェックが false を返す場合は、モデルに基づいて HTML のみを出力します。
  2. コントローラーのデータベース取得ロジックを、ダミーのブログ データを生成するコードに置き換え、代わりにこれをビューに渡します。

ソリューション 1 の場合、ビューでは次のようになります。

@if (Model == null)
{
    <span>No data!</span>
}
@else
{
    // All the auto generated view code goes here...
}

解決策 2 では、コントローラーのデータ取得コードを置き換える必要があります。したがって、このようなコードはすべて削除してください。

BlogPost blogPost = db.BlogPosts.Find(id)

このようなものに置き換えます。

BlogPost blog = new BlogPost()
{
    Title = "Use Entity Framework Code-First";
    Post = "blog post body goes here..."
};

IEnumerable<BlogPost> posts = new List<BlogPost>();
posts.Add(blog);

注: これら 2 つの解決策は、問題を説明するためのものであり、データベースを正しくセットアップしたら、データ取得コードの使用に戻る必要があります。

于 2011-12-18T10:53:36.067 に答える