Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 首先使用EF代码填充未映射的聚合属性_Entity Framework_Ef Code First - Fatal编程技术网

Entity framework 首先使用EF代码填充未映射的聚合属性

Entity framework 首先使用EF代码填充未映射的聚合属性,entity-framework,ef-code-first,Entity Framework,Ef Code First,我首先使用EF代码,有一个包含图像记录的域模型,每个图像记录都由用户上传,并且有一个或多个投票。票数为1或-1。它基本上是“热或不热”画廊类型的应用程序-在这里,每个图像都可以被竖起或竖起大拇指 我正在尝试显示一个带有净评级的图像列表。然而,我希望尽可能高效地完成这项工作,理想情况下只需一次数据库调用,而不使用延迟加载 我在图像类上创建了一个名为NetRating的未映射属性。然后我想填充这个。我试着使用投影来提取值。还有一个额外的复杂情况,因为他们可能是零票,因此我需要确保0返回这里

我首先使用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,无法为不属于实体集的查询映射视图的实体构造函数指定相关实体。”

如果有人能提供建议,或者至少能翻译错误信息所指的内容,我将不胜感激

谢谢

安迪