C# 检索实体框架内类的数据库计算属性

C# 检索实体框架内类的数据库计算属性,c#,entity-framework,C#,Entity Framework,我对EF有很好的理解,并且成功地生成了我的数据库。现在,我正在努力向其中一个实体类添加动态属性。例如,我有一个Post类,其他用户可以对帖子发表评论。当我列出现有帖子时,我想显示对相应帖子的评论数量 一种解决方案可能是使用名为CommentCount的属性,并通过在发表新评论时将CommentCount属性的(int)值增加1来更新帖子 另一种解决方案,我认为这是一个更好的解决方案,就是当从数据库检索帖子时,可以同时计算和检索与帖子相关联的评论数量,并将其分配给post实例的CommentCou

我对EF有很好的理解,并且成功地生成了我的数据库。现在,我正在努力向其中一个实体类添加动态属性。例如,我有一个
Post
类,其他用户可以对帖子发表评论。当我列出现有帖子时,我想显示对相应帖子的评论数量

一种解决方案可能是使用名为
CommentCount
的属性,并通过在发表新评论时将
CommentCount
属性的(
int
)值增加1来更新帖子

另一种解决方案,我认为这是一个更好的解决方案,就是当从数据库检索帖子时,可以同时计算和检索与帖子相关联的评论数量,并将其分配给post实例的
CommentCount
属性。然而,我不知道如何通过EF实现这一点


强烈建议采用哪种方法?或者,还有其他的方法吗?如果是第二个视图,如何使用EF实现这一点?

如果计算非常复杂,您应该尝试在数据库中创建视图,然后将其添加到模型中

但是如果你的模型有一些简单的东西,比如

class Post {
    public int postid { get; set; }
    public virtual ICollection<comment> comment { get; set; }
}
获取评论总数

还是在你看来

@foreach (var item in Model)
{
    <li>item.postid;</li>
    <li>item.comment.Count();</li>
} 

1)您应该简单地考虑<强>不要将< <强> >属性称为“代码>注释计数< /代码>到您的模型中。当您开发了一个WPF Windows应用程序时,您应该考虑使用,而 CalpCuths<代码>将属于您的VIEW模型类,而不是属于您的模型类。在这里,您实现了INotifyPropertyChanged,您可以从前端视图中使用它。类似地,ASP.NET等也有MVC模式

还有其他类似的设计模式。使用此模式,您可以在存储库类中而不是在存储库中创建
CommentCount
模范班。这将类似于您的第二个解决方案

2) 根据您的问题,我假设您使用的是代码优先的方法:

成功生成我的数据库

如果这样做并且希望直接在模型类中包含
CommentCount
,可以通过向项目中添加部分类文件来实现,如下所示:

namespace DBModel.Models
{
    public partial class Post
    {
        public int CommentsCount
        {
            get { return this.Comments.Count; }
        }
        ...
但我不明白为什么要在模型中创建额外的属性


另一方面,将此字段作为计算字段添加到SQL数据库中可能有意义,然后它将成为EF模型的一部分。

是否先使用代码?请检查此问题。我的问题是如何将数据绑定到
CommentCount
,我应该如何更改
Post
类,以便在检索
DBSet Posts
时,每个
Post
实例都将具有正确的
CommentCount
值?每次计算注释不是一个好的做法,我建议在Post表中使用CommentCount,无论何时添加或删除评论,都应该更新。考虑到这将是一个复杂的计算,我的问题是如何将数据绑定到
CommentCount
,如何更改
Post
类,以便在检索
DBSet Posts
时,每个
Post
实例都将具有正确的
CommentCount
值?@erkaner我更新我的注释,向类添加属性。请注意,如果要更改所需的类,请在不同的派生类中执行,否则,如果从DB执行EF更新,则会丢失代码。如果对你有效,请告诉我。如果您显示类的代码也会有所帮助。@erkaner我还添加了一个渴望加载的示例。使用
Include
将获得重新发布的数据。
class Post {
    public int postid { get; set; }
    public virtual ICollection<comment> comment { get; set; }
    public int CommentCount
    {
        get 
        { 
            return comment.Count();
        }
    }

}
filter = db.poi
           .Include("parish")
           .Include("sector")
           .Include("city")
           .Include("parish.municipality")
           .Include("parish.municipality.state")
           .Where(x => x.sector_id == SectorID);
namespace DBModel.Models
{
    public partial class Post
    {
        public int CommentsCount
        {
            get { return this.Comments.Count; }
        }
        ...