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

时间:2012-02-10 14:00:38

标签: entity-framework ef-code-first

我首先使用EF代码并且拥有包含图像记录的域模型,每个图像记录由用户上传并具有一个或多个投票。投票得分为1或-1。它基本上是“热门或不热门”的图库类型应用程序 - 每个图像都可以竖起大拇指或竖起大拇指。

我正在尝试显示具有净评级的图像列表。但是我希望尽可能高效地完成此操作,理想情况是使用一个数据库调用而不使用延迟加载。

我在我的Image类中创建了一个名为NetRating的未映射属性。我想填充这个。我正在尝试关注this method以使用投影来提取值。还有一个额外的复杂因素是它们可能是零投票,因此我需要确保在这里返回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();
    }

这会导致以下错误:“内部.NET Framework数据提供程序错误1004,0,无法为不属于实体集的查询映射视图的实体构造函数指定相关实体。”

感谢是否有人可以提供建议 - 或至少翻译错误消息所指的内容。

由于

安迪

0 个答案:

没有答案