2013-03-27 4 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.

С уважением, Kristian.

+2

Простое предложение, вам нужно следовать правилам кодирования C# –

+2

Вы подтвердили, что свойство 'technical_skill_level_id' имеет законное значение? Из ошибки видно, что это значение не находится в таблице «TECHNICAL_SKILL_LEVEL». Возможно, выпадающие значения равны нулю вместо правильного значения. –

+0

@CuongLe, я поставил свой код C# выше, должен ли я добавить больше? – Kriistiian

ответ

0

Похоже, что инфраструктура Entity не может преобразовать Convert.ToInt32() в выражение SQL. Я хотел бы преобразовать значения RadioButton и выпадающие в 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 
     } 

Кроме того, так как вы уже отстранились уровень квалификации и ценности навыков, нет необходимости, чтобы захватить значения из выпадающего списка/списка радиокнопки. Просто используйте объекты skillValue и skillLevel.

+0

Извините за поздний ответ, восточный уик-энд, но я сделал то же, что и вы, и он работает =) – Kriistiian