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