Не удается обновить Tabled Mapped в Linq2Sql - PullRequest
1 голос
/ 17 февраля 2009

У меня проблемы сейчас, я не могу обновить таблицу X в DBDataContext, так что это мой фрагмент, кстати, когда я обновляю только одну таблицу, это работает! Но когда я вставляю, а затем обновляю, выдается исключение: «невозможно привести объект из System.Int32 к типу System.String»

{
            using (DBDataContext db = new DBDataContext())
            {
                int codigo = Convert.ToInt32(lblNroInforme.Content);
                int sucessfull = 0;


                INFORMEMEDICO varInf = (from i in db.INFORMEMEDICOs
                                        where i.numeroinforme == codigo
                                        select i).SingleOrDefault();


                if (varInf == null)
                {
                    varInf = new INFORMEMEDICO();
                    varInf.codigoclase = Convert.ToInt32(lblCodigoClase.Content.ToString());
                    varInf.codigoestudio = lblCodigoEstudio.Content.ToString();
                    varInf.codigopaciente = Convert.ToInt32(lblCodigoPaciente.Content.ToString());
                    varInf.conclusion = GetText(rtbConclusion);
                    varInf.fechainforme = DateTime.Today;
                    varInf.firmauno = getJPGFromImageControl(firmaUno.Source as BitmapImage);
                    varInf.firmados = getJPGFromImageControl(firmaDos.Source as BitmapImage);
                    varInf.hallazgo = GetText(rtbHallazgo);
                    varInf.horainforme = Convert.ToDateTime(DateTime.Today.ToShortTimeString());
                    varInf.impreso = 0;
                    varInf.medicoinforma = cboTurnoMed.SelectedValue.ToString();
                    varInf.nombreinforme = txtNombreExamen.Text;
                    varInf.numeroinforme = Convert.ToInt32(lblNroInforme.Content.ToString());
                    varInf.tecnica = GetText(rtbTecnica);
                    varInf.turnosocio = lblTurnoMedico.Content.ToString();

                    try
                    {
                        db.INFORMEMEDICOs.InsertOnSubmit(varInf);
                        db.SubmitChanges();
                        sucessfull = 1;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error : " + ex.Message);
                    }
                    if (sucessfull==1)
                    {
                        EXAMENXATENCION varExA = (from ea in db.EXAMENXATENCIONs
                                                  where ea.codigo == codigo
                                                  select ea).SingleOrDefault();
                        varExA.estadoestudio = 'I';
                        db.SubmitChanges();
                    }

                }

            }

        }

Я получаю этот стек от отладчика при выполнении обновления:

en System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager`3.TryCreateKeyFromValues(Object[] values, MultiKey`2& k)
   en System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager`3.TryCreateKeyFromValues(Object[] values, MultiKey`2& k)
   en System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager`3.TryCreateKeyFromValues(Object[] values, MultiKey`2& k)
   en System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager`3.TryCreateKeyFromValues(Object[] values, MultiKey`2& k)
   en System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find(Object[] keyValues)
   en System.Data.Linq.IdentityManager.StandardIdentityManager.Find(MetaType type, Object[] keyValues)
   en System.Data.Linq.CommonDataServices.GetCachedObject(MetaType type, Object[] keyValues)
   en System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc, Object instance)
   en System.Data.Linq.ChangeProcessor.BuildEdgeMaps()
   en System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
   en System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
   en System.Data.Linq.DataContext.SubmitChanges()
   en Demo.View.InformeMedico.btnGuardar_Click(Object sender, RoutedEventArgs e) en D:\cs_InformeMedico\app\InformeMedico.xaml.cs:línea 430

Ответы [ 3 ]

2 голосов
/ 02 июня 2009

LINQ to Sql не поддерживает внешние ключи для ограничений уникальных ключей (то есть альтернативных ключей). У меня была такая же проблема, и я обнаружил, что читаю некоторые блоги. Я думаю, это не ошибка.

Неосновные ключи и проблемы LINQ to SQL (это ошибка)?

1 голос
/ 24 августа 2010

После долгих исследований я обнаружил, что эта ошибка существует только на WinXP-машинах с .net 3.5 SP1. На Windows 7 работает нормально. К сожалению, есть две разные сборки одного и того же фреймворка.

Существует исправление от Microsoft, которое решает мою проблему на компьютерах xp. http://support.microsoft.com/hotfix/KBHotfix.aspx?kbln=ja&kbnum=963657

С уважением, Florian

0 голосов
/ 17 февраля 2009

Откройте ваш файл DMBL как файл XML. Проверьте ваши типы для каждого столбца и посмотрите, действительно ли что-то, что должно быть int, является строкой.

...