我的控制器中有两个列表(.net核心mvc 2.0,使用实体框架工作核心的数据库访问)
homeData.ListBrands = await _context.Brands.Where(b => formdata.UserCategories.Any(y => b.CategoryBrands.Any(c => c.CategoryID == y.CategoryID))).ToListAsync();
homeData.NewBrands = await _context.Brands.OrderByDescending(x => x.CreationDate).Take(5).ToListAsync();
两者都是来自数据库的品牌列表 在品牌我有colum徽标,其中包含徽标名称,仅为客户创建完整路径我附加数据路径
homeData.NewBrands.ForEach(x => x.BrandLogo = BrandLogo + "/" + x.BrandLogo);
homeData.ListBrands.ForEach(x => x.BrandLogo = BrandLogo + "/" + x.BrandLogo);
如果两个列表中都有相同的品牌,那么追加网址会重复,因为它们代表相同的对象。
http://localhost:4399/Uploads/BrandLogo/http://localhost:4399/Uploads/BrandLogo/IMKbershkaD_19_Mar_2018_13_10_10.png
我尝试了新的内部选择
homeData.NewBrands=_context.Brands.OrderByDescending(x => x.CreationDate).Select(x=>new Brand() {BrandCoverImages=x.BrandCoverImages,BrandDEscriptionAr=x.BrandDEscriptionAr,BrandDEscriptionEn=x.BrandDEscriptionEn,BrandID=x.BrandID,BrandLocations=x.BrandLocations,BrandLogo=x.BrandLogo }).Take(5).ToListAsync();
它适用于我,但我必须使用new甚至内部对象,如brandCover图像,因为我还必须更改内部对象中的路径。从数据库中选择时是否还有其他方法可以创建新对象。我使用实体核心2.0进行数据访问
答案 0 :(得分:2)
您需要的是No-Tracking Query。没有跟踪意味着EF(1)不会在上下文中跟踪返回的实体实例,并且(2)不会重用已经由上下文跟踪的实体实例。有关详细信息,请参阅How Queries Work。
话虽如此,只需将AsNoTracking()
添加到查询根目录:
homeData.ListBrands = await _context.Brands.AsNoTracking().Where(...
homeData.NewBrands = await _context.Brands.AsNoTracking().OrderByDescending(...