我对 SignalR 一无所知,但我很确定问题与您尝试为空对象的属性呈现 HTML 的视图有关。
我浏览了这篇文章,看不到对存储数据的实际数据库的任何引用,并且没有提供代码来从您的代码生成数据库(并且该帖子的作者不清楚您是否将连接到现有数据库或生成一个)。
有关将代码映射到现有数据库的示例,请参见此处。
如果您还没有现有的数据库,那么您需要告诉您的实体框架代码生成一个;本文将向您展示如何做到这一点(您需要的东西在帖子的底部)。
现在,看看您设置实体类的方式并假设您尚未完成两篇文章中提到的任何事情,Entity Framework 应该会自动为您创建一个数据库(这是默认行为 - 不确定如果您没有安装 SQL Server Express 或更高版本会发生什么)。您是否检查过您的 SQL Server 实例中是否有数据库?它应该被称为BlogPostContext。用一些数据填充它,现在应该可以工作了。
那你为什么会遇到这个问题?目前你要么有
- 没有数据库,或者
- 没有数据的数据库。
这意味着您的控制器是
- 从不存在的东西请求数据,或者
- 从空数据库请求数据
您将从这两种情况中得到的结果是一个空对象。然后将此空对象传递给您的视图,然后这些视图尝试迭代空对象并生成您的异常。
您可以通过两种方式验证这一点。
- 检查视图中的空对象,如果空检查返回 false,则仅根据您的模型输出 HTML。
- 将控制器中的数据库检索逻辑替换为生成一些虚拟博客数据的代码,并将其传递到您的视图中。
对于解决方案 1,您认为类似于以下内容:
@if (Model == null)
{
<span>No data!</span>
}
@else
{
// All the auto generated view code goes here...
}
对于解决方案二,您需要替换控制器中的数据检索代码。所以删除任何这样的代码;
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);
注意:这两个解决方案是为了向您演示问题,一旦您正确设置了数据库,您应该恢复使用数据检索代码。