我正在使用Entity框架开发一个winform应用程序。这是我的.edmx类图
当我从此查询中获取数据时,
var empQuery = from emp in db.Publishers
select emp;
List<Publisher> pubList = empQuery.ToList();
dataGridView1.DataSource = pubList;
名为BOOKs的列也在返回。我想阻止它。请求给我一个建议。我是Entity Framework的新手。
答案 0 :(得分:4)
根据您的表关系自动生成导航属性。如果您不想要该属性,只需将其从EDMX中删除即可。
但是,请记住导航属性通常是延迟加载的,这意味着即使存在此属性,在访问之前它实际上也不会包含任何数据。
答案 1 :(得分:3)
假设您不想在数据网格视图中显示BOOKs
列,则需要手动指定其中的列或返回其他类型。你可以使用这样的匿名类型:
var empQuery = (from emp in db.Publishers
select new
{
emp.Id, emp.Name, emp.Year
}).ToList();
dataGridView1.DataSource = empQuery;
答案 2 :(得分:0)
&#34;列BOOKS&#34;不是列,它是导航属性。在这种情况下,它是Book实体的集合,与当前Publisher实体相关。 我认为您在数据网格中获得了此列BOOKS,因为您没有在datagridView1中指定要显示的列。 请记住,如果在数据网格(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datagrid.autogeneratecolumns%28v=vs.110%29.aspx)中使用AutogenerateColumns标志,则数据网格将为数据源集合中实体的每个属性呈现一列。 更具体地说,我需要知道你工作的场景(ASP.NET,Silverlight等)
答案 3 :(得分:-1)
Books属性不代表数据库列,它表示Publisher和Book的关系,并包含Books表中的相关书籍(这些书籍经常被延迟加载)。
这是EF(和其他ORM)的工作方式。您可以编辑模型并删除两者之间的关系,但如果您这样做,则不会使用EF的一个关键功能。
我的建议是保留您的域模型(因为它是正确的)并更新Gridview的列,以便不显示该属性。