我使用实体连接到数据库:Entity db = new Entity();
。。。然后我将DataGrid添加到表单中,并尝试从数据库中接收表格
var pp = from asd in db.ABONENT select asd;
MyDataGrid.ItemsSource = pp.ToList();
结果如下:屏幕截图
它显示其他链接表中的其他字段,为什么?如何仅显示ABONENT表中的数据?
我的猜测是,您正在使用DataGrid来显示所有表的内容。列定义是静态的还是动态加载的?
如果是动态的,我建议删除每个数据绑定之间的所有列。
如果是静态的,则隐藏不想显示的列(Visible=false)。
在实体框架中,您有Entities
,而不是Tables
。实体框架将表的关系概念抽象为应用程序中使用的对象。这就是ORM的作用。
因此,表之间的关系在实体中被表示为Navigation Property
,它基本上是表示关联实体的实体类中的一个属性。
我的观点是…如果您打算将表直接公开到UI中,为什么要使用ORM?。使用普通的ADO.Net,或者以其他方式定义用户界面,这样就不会直接向用户公开整个表。用户对表一无所知。用户了解他们的业务。因此,您的应用程序应该对表一无所知。
从用户体验的角度来看,我认为这是一种糟糕的做法,例如,为什么用户要在他们的UI中看到Id列,如abonentID和RegionID??他们不在乎,也不理解。行ID是RDBMS的概念,而不是业务概念。
我的建议是:重新思考您的方法:要么回退到使用普通的旧ADO.Net,要么在DataGrid中将AutoGenerateColumns
设置为false,只公开用户关心的列。
您可以使用以下语法选择实体的公开属性:
var pp = from asd in db.Products
select new
{
asd.Id,
asd.Name,
ProductCategory = asd.ProductCategory.Name,
};
MyDataGrid.ItemsSource = pp.ToList();