0

我使用实体连接到数据库: Entity db = new Entity(); ...然后我将 DataGrid 添加到表单并尝试从我的数据库中接收表

var pp = from asd in db.ABONENT select asd;

MyDataGrid.ItemsSource = pp.ToList();

结果在这里: 截图

它显示其他链接表中的其他字段,为什么?如何仅显示 ABONENT 表中的数据?

4

3 回答 3

1

我的猜测是您正在使用 DataGrid 来显示所有表格的内容。你的列定义是静态的还是动态加载的?

如果是动态的,我建议删除每个数据绑定之间的所有列。

如果它是静态的,请隐藏您不想显示的列(可见 = false)。

于 2012-12-03T20:35:09.447 回答
1

在实体框架中,您有Entities,而不是Tables. 实体框架将表的关系概念抽象为您在应用程序中使用的对象。这就是 ORM 的作用。

因此,表之间的关系在实体中表示为所谓的 a Navigation Property,它基本上是实体类中表示关联实体的属性。

我的观点是.. 如果您打算将表直接公开到 UI 中,为什么要使用 ORM?为此,请使用普通的旧 ADO.Net,或者以不直接向用户公开整个表的方式定义您的 UI。用户对表格一无所知。用户了解他们的业务。因此,您的应用程序应该对表一无所知。

从用户体验的角度来看,我认为这是一种不好的做法,例如,为什么用户应该在他们的 UI 中看到诸如 abonentID 和 RegionID 之类的 Id 列?他们不关心这一点,也不理解这一点。行 ID 是 RDBMS 概念,而不是业务概念。

我的建议:重新考虑您的方法:要么回退到使用普通的旧 ADO.Net,要么AutoGenerateColumns在 DataGrid 中将 设置为 false 并仅公开用户关心的列。

于 2012-12-03T20:40:18.737 回答
0

您可以使用以下语法选择实体的公开属性:

var pp = from asd in db.Products
            select new
            {
                asd.Id,
                asd.Name,
                ProductCategory = asd.ProductCategory.Name,
            };
MyDataGrid.ItemsSource = pp.ToList();
于 2012-12-03T22:43:38.973 回答