在查询中使用JOIN时更新实体

本文关键字:更新 实体 JOIN 查询 | 更新日期: 2023-09-27 17:54:53

我有这个RadGrid与EF数据源使用JOIN,例如

var result = db.Programmes.Join(db.Faculties, prog => prog.FacultyID, fac => fac.ID, 
(prog, fac) => new {
                ID = prog.ID,
                FacultyID = prog.FacultyID,
                FacultyText = fac.FacultyName_mk,
                StudyLevelID = prog.StudyLevelID,
                Ects = prog.Ects
            }).ToList();
RadGrid1.DataSource = result;

到目前为止一切顺利。我已经正确显示了数据。

当我想插入新项目(程序)或更新现有项目时,问题就出现了。

protected void RadGrid1_UpdateCommand(object sender, GridCommandEventArgs e)
{
    GridEditableItem item = e.Item as GridEditableItem;
    // get the ID
    Int32 id = (Int32)item.GetDataKeyValue("ID");
    // get the current record
    var record = db.Programmes.Where(r => r.ID == id).FirstOrDefault();
    //update entity's information with what was entered in the RadGrid
    item.UpdateValues(record);
    db.SaveChanges();
    // close the edit form
    RadGrid1.MasterTableView.ClearEditItems();
}

这个东西会更新所有列,除了应该从RadComboBox控件中获取的教员id;

<EditItemTemplate>  
    <telerik:RadComboBox runat="server" ID="cmbFacultyID" /> 
</EditItemTemplate>

我从ItemDataBound内竞标组合,它从院系实体读取。

我如何更新程序表从这个组合框读取教员id ?

Thank you so much

在查询中使用JOIN时更新实体

事实证明,我只需要在我从分配新选择的教员的查询中获得后立即更新记录,例如

// get the current record
var record = db.Programmes.Where(r => r.ID == id).FirstOrDefault();
// FIX
record.FacultyID = Convert.ToInt32(facultyid.SelectedValue);
// update entity's information with what was entered in the RadGrid
item.UpdateValues(record); 

现在可以正常工作了:)谢谢你