Entity framework 实体框架代码WebAPI项目中第一个缺少外键实体

Entity framework 实体框架代码WebAPI项目中第一个缺少外键实体,entity-framework,asp.net-web-api,repository,code-first,Entity Framework,Asp.net Web Api,Repository,Code First,我担心如果我加入我的代码,这篇文章会变得太长太复杂,所以我会尝试解释我的问题。不过,如果您希望看到一些代码来说明这个问题,我很乐意在以后添加它 我有一个项目,MVC4项目网站。该网站首先使用实体框架代码。我的实体类在一个单独的项目中:Website.Domain 我有一门新闻邮报课: public virtual int Id { get; set; } public virtual string Subject { get; set; } public virtual string Conte

我担心如果我加入我的代码,这篇文章会变得太长太复杂,所以我会尝试解释我的问题。不过,如果您希望看到一些代码来说明这个问题,我很乐意在以后添加它

我有一个项目,MVC4项目网站。该网站首先使用实体框架代码。我的实体类在一个单独的项目中:Website.Domain

我有一门新闻邮报课:

public virtual int Id { get; set; }
public virtual string Subject { get; set; }
public virtual string Content { get; set; }
public virtual string ImageName { get; set; }
public virtual DateTime CreateTime { get; set; }
public virtual int CreatedById { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
现在在我的MVC项目中,我用一些存储库类和ninject设置了实体框架,以将所有内容与控制器分离。当我在我的新闻帖子上做一个GetAll的时候。NewsPost.Comments将填充与此新闻帖子关联的评论。这一切都很完美

现在我想使用webapi,所以我建立了一个新的MVC basic项目。我删除了“视图”文件夹和“模型”文件夹。然后,我在这里设置了所有存储库以及entity framework dbcontext类。并在项目上启用了迁移,以允许我首先以与Website.Web项目相同的方式使用实体框架代码。我还引用了与web项目相同的域类

现在问题来了。我试着在Newspost上执行GetAll,但是当我检查GetAll返回的列表时,我发现虽然它获取了数据库中的所有新闻,但是注释是空的。我非常确定我的Website.API的设置方式与我的Website.Website.Web相同-那么我缺少什么呢


我希望我解释得足够好。同样,如果您需要任何额外的代码,或者我需要澄清一些要点,我很乐意这样做,我只是不想让问题变得比已经有太多代码的问题更复杂。

看起来和听起来,您正在使用PluralSight课程,并试图根据它对应用程序进行建模。我最好的建议是去看看Julie Lerman的课程,因为该课程说明了如何设置数据层kadumel:谢谢你的评论。是的,我最初是从一门复数视觉课程中学到的,但在复数视觉一开始工作后,我从下到上重新制作了整个东西。所以在现实中,它不是来自于一个pluralsight课程……对我来说,这并不重要,关键是你的解决方案中有一个数据项目没有正确设置。如果您不想发布所有代码和配置以获得帮助,那么您需要向Julie学习如何设置EF CodeFirst模型。事实上,你只需要向任何人学习如何正确地做这件事,关于这个主题有很多文章。不,这不是必需的。C中没有构造函数意味着默认情况下有一个无参数的空公共隐藏构造函数。没关系。我在考虑代理的要求。它们是很多类中不可密封的,不可抽象的是另一类。如果一个未实现,EF不会创建代理,这意味着延迟加载将不起作用=注释将为null。您是否检查了从回购协议返回的新闻帖子是否为代理?如果类型为dynamicProxy xxxxx….,则可以在调试器中看到它。。。。而不是NewsPost.Ahh-在某个时候,我一定写了以下内容:Context.Configuration.ProxyCreationEnabled=false;-这导致它不会像你说的那样加载评论。但如果我不禁止创建代理,它就无法序列化为JSON/XML格式。但这是另一个问题。谢谢你,斯劳玛!
public virtual int Id { get; set; }
public virtual int CreatedById { get; set; }
public virtual DateTime CreatedTime { get; set; }
public virtual string Content { get; set; }