LightSwitch实体:更新外键属性的值

时间:2011-12-06 18:26:00

标签: c# visual-studio-lightswitch

我正在努力解决如何在LightSwitch中执行以下操作。我在partial void tblStaffExtendeds_Updating(tblStaffExtended entity)期间'拦截'实体,然后从我们的本地ldap中提取一些数据,并尝试将实体的某个属性设置为特定值,如下所示:

partial void tblStaffExtendeds_Updating(tblStaffExtended entity)
    {

        string ldapPath = @"LDAP://DC=myLDAP,DC=myLDAP";            
        string user = entity.GPEmployeeID.ToString();
        string[] props = { 
                            ActiveDirectoryInfo.strings.DISPLAYNAME, ActiveDirectoryInfo.strings.EMAIL, 
                            ActiveDirectoryInfo.strings.LOGONALIAS, ActiveDirectoryInfo.strings.PHONE, 
                            ActiveDirectoryInfo.strings.OFFICE, ActiveDirectoryInfo.strings.TITLE, 
                            ActiveDirectoryInfo.strings.GPEMPLOYEEID
                          };

        var propResults = ActiveDirectoryInfo.UserPropertySearchByGPEmpID(user, ldapPath, props);

        entity.tblAdminStaffType.StaffType = propResults[ActiveDirectoryInfo.strings.TITLE];
        entity.WorkEmail = propResults[ActiveDirectoryInfo.strings.EMAIL];
        entity.UserID = propResults[ActiveDirectoryInfo.strings.LOGONALIAS];
        entity.WorkPhone = propResults[ActiveDirectoryInfo.strings.PHONE];
   }

现在,对于WorkEmailWorkPhone这样的字段,效果很好,因为这些属性只是strings,这就是我从LDAP获得的内容。
但是,我是否要设置StaffType这是对Admin Table条目的引用? LDAP返回一个string,它与管理员表上的描述相匹配,但在实体上,我需要将其设置为正确的ID,我假设。

有没有办法做到这一点,没有创建“查找”方法,通过将描述与String中的LDAP匹配,从管理员表中查找ID?

1 个答案:

答案 0 :(得分:1)

解决方案应该如下所示:

string title = propResults[ActiveDirectoryInfo.strings.TITLE];

var qryAdminStaffType = from st in DataWorkspace.ApplicationData.StaffTypes
                        where st.Title == title
                        select st;

entity.tblAdminStaffType.StaffType = qryAdminStaffType.FirstOrDefault();

在这个例子中,我假设您的数据源名为ApplicationData(LS默认名称), StaffTypes 表保存您的员工类型,并且您匹配标题属性。请注意,如果标题不匹配,FirstOrDefalt()将返回null。