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