2013-03-27 81 views
1
protected void ButtonAddDatabase_Click(object sender, EventArgs e) 
{ 
    using (KnowItCvdbEntities db = new KnowItCvdbEntities()) 
    { 
     SPWeb theSite = SPControl.GetContextWeb(Context); 
     SPUser theUser = theSite.CurrentUser; 
     string strUserName = theUser.LoginName; 

     var theEmplDbSkill = (
         from p 
         in db.EMPLOYEES 
         where p.username == strUserName 
         select p).FirstOrDefault(); 

     _emp = theEmplDbSkill; 

     if (_emp != null) 
     {       
      foreach (var vItem in ListBoxDatabases.Items) 
      { 
       if (ValueAlreadyInListDb(vItem)) 
        return; 
      }       

     //Get existing skilllevel from db 
     var skillLevel = (from sL in db.TECHNICAL_SKILL_LEVEL 
         where sL.technical_skill_level_id == Convert.ToInt32(DropDownListDB.SelectedValue) 
         select sL).FirstOrDefault(); 

     //Get existing skillvalue from db 
     var skillValue = (from sV in db.TECHNICAL_SKILLS 
         where sV.technical_skill_id == Convert.ToInt32(RadioButtonListDatabase.SelectedValue) 
         select sV).FirstOrDefault(); 

     //Adding to employees_technical_skills table 
     var empSkill = new EMPLOYEES_TECHNICAL_SKILLS 
     { 
      technical_skill_id = Convert.ToInt32(DropDownListDB.SelectedItem.Value), 
      TECHNICAL_SKILLS = skillValue, 
      technical_skill_level_id = Convert.ToInt32(RadioButtonListDatabase.SelectedItem.Value) 
      TECHNICAL_SKILL_LEVEL = skillLevel, 
      employee_id = _emp.employee_id 
     } 

      _emp.EMPLOYEES_TECHNICAL_SKILLS_Add(empSkill); 
      db.SaveChanges(); 

      _emp.EMPLOYEES_TECHNICAL_SKILLS.Add(empSkill); 
      db.SaveChanges(); 

     }     
    } 
}  

现在我正在下面的表格填充: enter image description here无法填充数据库表

这是我的表: enter image description here

但我不断收到错误:

LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method, and this method cannot be translated into a store expression.

Regards, Kristian。

+2

只是建议,你需要遵循C#编码约定 – 2013-03-27 15:19:46

+2

你确认'technical_skill_level_id'属性有一个合法的值吗?从错误中看来,这个值不是'TECHNICAL_SKILL_LEVEL'表中的值。也许下拉值都是零而不是正确的值。 – 2013-03-27 15:20:34

+0

@CongLong,我确实把我的C#代码放在上面,我应该放更多? – Kriistiian 2013-03-27 15:20:35

回答

0

看起来实体框架不能将Convert.ToInt32()转换为SQL表达式。我先在单选按钮和下拉值转换为int在内存中,然后将它们传递到查询:

int TechnicalSkillLevelID = int.Parse(DropDownListDB.SelectedValue); 
int TechnicalSkillID = int.Parse(RadioButtonListDatabase.SelectedValue); 
//Get existing skilllevel from db 
     var skillLevel = (from sL in db.TECHNICAL_SKILL_LEVEL 
         where sL.technical_skill_level_id == TechnicalSkillLevelID) 
         select sL).FirstOrDefault(); 

     //Get existing skillvalue from db 
     var skillValue = (from sV in db.TECHNICAL_SKILLS 
         where sV.technical_skill_id == TechnicalSkillID) 
         select sV).FirstOrDefault(); 

     //Adding to employees_technical_skills table 
     var empSkill = new EMPLOYEES_TECHNICAL_SKILLS 
     { 
      technical_skill_id = skillValue.technical_skill_id, 
      TECHNICAL_SKILLS = skillValue, 
      technical_skill_level_id = skillLevel.technical_skill_level_id) 
      TECHNICAL_SKILL_LEVEL = skillLevel, 
      employee_id = _emp.employee_id 
     } 

而且,既然您已经拉回的技能水平和技能值,没有必要抓住从价值观下拉/单选按钮列表。只需使用skillValueskillLevel对象。

+0

对不起,迟到的回应,东部周末呵呵。但我做了和你一样的工作,它的工作原理=) – Kriistiian 2013-04-03 09:26:38