Entity framework 首先使用EF代码填充未映射的聚合属性
我首先使用EF代码,有一个包含图像记录的域模型,每个图像记录都由用户上传,并且有一个或多个投票。票数为1或-1。它基本上是“热或不热”画廊类型的应用程序-在这里,每个图像都可以被竖起或竖起大拇指 我正在尝试显示一个带有净评级的图像列表。然而,我希望尽可能高效地完成这项工作,理想情况下只需一次数据库调用,而不使用延迟加载 我在图像类上创建了一个名为NetRating的未映射属性。然后我想填充这个。我试着使用投影来提取值。还有一个额外的复杂情况,因为他们可能是零票,因此我需要确保0返回这里Entity framework 首先使用EF代码填充未映射的聚合属性,entity-framework,ef-code-first,Entity Framework,Ef Code First,我首先使用EF代码,有一个包含图像记录的域模型,每个图像记录都由用户上传,并且有一个或多个投票。票数为1或-1。它基本上是“热或不热”画廊类型的应用程序-在这里,每个图像都可以被竖起或竖起大拇指 我正在尝试显示一个带有净评级的图像列表。然而,我希望尽可能高效地完成这项工作,理想情况下只需一次数据库调用,而不使用延迟加载 我在图像类上创建了一个名为NetRating的未映射属性。然后我想填充这个。我试着使用投影来提取值。还有一个额外的复杂情况,因为他们可能是零票,因此我需要确保0返回这里
public virtual IList<Image> GetListWithNetRating(
Expression<Func<Image, bool>> filter = null,
Func<IQueryable<Image>, IOrderedQueryable<Image>> orderBy = null,
string includeProperties = "",
int pageNumber = 0,
int pageSize = 0)
{
// Get standard list retrieval query from generic repository
IQueryable<Image> query = base.GetListQuery(filter, orderBy, includeProperties, pageNumber, pageSize);
// Create projection with images and net rating from votes
var projection = query.Select(x => new
{
Image = x,
User = x.User, // - included field seems to be lost when projecting, so specifically re-including it here
NetRating = (int?)x.Votes.Sum(v => v.Score) ?? 0,
});
// Update aggregate field on image
foreach (var p in projection)
{
p.Image.NetRating = p.NetRating;
p.Image.User = p.User;
}
// Return set of images
return projection.Select(p => p.Image).ToList();
}
公共虚拟IList GetListWithNetRating(
表达式筛选器=空,
Func orderBy=null,
字符串includeProperty=“”,
int pageNumber=0,
int pageSize=0)
{
//从通用存储库获取标准列表检索查询
IQueryable query=base.GetListQuery(筛选器、orderBy、includeProperties、pageNumber、pageSize);
//使用图像和投票的净评级创建投影
var projection=query.Select(x=>new
{
图像=x,
User=x.User,//-included字段在投影时似乎丢失了,因此在此处重新包含它
净评级=(整数?)x.票数和(v=>v.分数)??0,
});
//更新图像上的聚合字段
foreach(投影中的var p)
{
p、 Image.NetRating=p.NetRating;
p、 Image.User=p.User;
}
//返回图像集
返回projection.Select(p=>p.Image).ToList();
}
这将导致以下错误:“内部.NET Framework数据提供程序错误1004,0,无法为不属于实体集的查询映射视图的实体构造函数指定相关实体。”
如果有人能提供建议,或者至少能翻译错误信息所指的内容,我将不胜感激
谢谢
安迪