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