实体框架用法

时间:2011-11-27 12:15:32

标签: c# entity-framework entity-framework-4

我有一个ListView,我使用此查询从名为view_ListaKlientow的SQL Server视图中填写:

    private void fillClientsList() {
        using (var context = new EntityBazaCRM()) {
            var listaKlientow = from d in context.view_ListaKlientow
                                select d;
            objectListViewListaKlientow.SetObjects(listaKlientow.ToList());
            objectListViewListaKlientow.AutoResizeColumns();
        } 
    }

然后,当用户双击ListView中的一行后,我从ID读取view_ListaKlientow并使用fillClientGui填写gui中的必填字段(对于测试,仅包含一个字段) 。

    private void objectListViewListaKlientow_DoubleClick(object sender, EventArgs e) {
        foreach (view_ListaKlientow user in objectListViewListaKlientow.SelectedObjects) {
            int id = user.KlienciID;
            fillClientGui(id);
            TabPageActivate(tabControlMain, tabPageKlient);
        }
    }
    private void fillClientGui(int klientId) {
        using (var context = new EntityBazaCRM()) {
            IQueryable<Klienci> klient = context.Kliencis.Include("Podmioty").Where(d => d.KlienciID == klientId);
            foreach (var source in klient.ToList()) {
                textNIP.Text = source.Podmioty.PodmiotNIP;
            }
        }
    }

现在我想知道,因为我确切地知道我正在查询一个ID我应该只获取特定客户端而不是客户列表所以foreach来自fillClientGui只是为了遍历{{1}似乎是额外的不必要的代码。或者这是应该怎么做的?我正在努力学习实体,有些事情我还不清楚:)

1 个答案:

答案 0 :(得分:1)

如果您确定从数据库中只返回了一个实例,则在这种情况下可以使用扩展函数FirstOrDefault()

var source = context.Kliencis.Include("Podmioty").Where(d => d.KlienciID == klientId).FirstOrDefault();
textNIP.Text = source.Podmioty.PodmiotNIP;