实体框架6获取表中不存在的记录
本文关键字:不存在 记录 框架 获取 实体 | 更新日期: 2023-09-27 18:02:26
In mvc action
Site site = siteRepository.UserSites(userId).Where(x => x.Order == siteOrder).Last();
在SiteRepository public IEnumerable<Site> UserSites(string userId)
{
return context.Sites.Include("Pages").Where(x => x.UserId == userId);
}
和其他存储库
public IEnumerable<Row> Items
{
get
{
return context.Rows;
}
}
public IEnumerable<Page> Items
{
get
{
return context.Pages;
}
}
public IEnumerable<AbstractBuildBlock> Items
{
get
{
return context.BuildBlocks;
}
}
我不知道为什么,但在调试器中,我看到请求UserSites(第一个存储库代码片段)后,在站点中。行还有一个记录,它是第一个记录,它由行构造器创建,我不知道为什么会发生。
这两个对象有不同的类型第一个(我不明白)类型是Domain.Entities.Row
,第二个是System.Data.Entity.DynamicProxies.Row_**********
(* -某些num)
我再重复一遍。在我的行表中只有一条记录,但在Site.Pages[someIndex]中。向数据库请求行后有两个对象,第一个对象在表中不存在,它由行构造器创建。为什么会这样?
Site类代码
public class Site
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required(ErrorMessage ="Please, enter the site local name")]
[Display(Name ="Local name")]
public string LocalName { get; set; }
[Required(ErrorMessage = "Please, enter the site public name")]
[Display(Name ="Public name")]
public string PublicName { get; set; }
[Display(Name ="Menu variant")]
public string MenuVariant { get; set; }
[Display(Name = "Color theme")]
public string ColorTheme { get; set; }
public string IconUrl { get; set; }
public string UserId { get; set; }
public int Order { get; set; }
public int NextPageOrder { get; set; }
public virtual List<TopMenuItem> TopMenuItems { get; set; }
public virtual List<LeftMenuItem> LeftMenuItems{ get; set; }
public virtual List<Page> Pages { get; set; }
public Page ActivePage { get; set; }
public int ActivePageIndex { get; set; }
public Site()
{
NextPageOrder = 1;
MenuVariant = "top";
ColorTheme = "dark";
}
}
页面类
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Title { get; set; }
public string Name { get; set; }
public virtual List<Row> Rows { get; set; }
public int SiteId { get; set; }
public virtual Site Site { get; set; }
public int Order { get; set; }
public int NextRowOrder { get; set; }
public Page()
{
Title = "title";
Rows = new List<Row>()
{
new Row()
};
}
首先我假设你的网站和页面有一些关系。当您试图从sites表中获取数据时,您正在从pages表中获取数据,并且在dbcontext查询中包含了页面。因此,如果您看到在dbcontext中使用include,那么您已经在站点和页面之间进行了左外连接。
你可以查看更多关于急切加载的信息http://www.entityframeworktutorial.net/EntityFramework4.3/eager-loading-with-dbcontext.aspx。让我知道它是否解决了你的问题。
见问题的解决方案,非常感谢Ivan Stoev。