【问题标题】:Can't update Tabled Mapped in Linq2Sql无法更新 Linq2Sql 中的表映射
【发布时间】:2009-02-16 21:25:00
【问题描述】:

我现在遇到了麻烦,我无法在 DBDataContext 中更新表 X,所以这是我的 sn-p,顺便说一下,当我只更新一个表时它可以工作!但是当我插入然后更新时,它会抛出异常:“无法将对象从 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

【问题讨论】:

    标签: linq-to-sql insert-update


    【解决方案1】:

    LINQ to Sql 不支持唯一键约束的外键(即备用键)。我遇到了同样的问题,发现阅读了一些博客。我想这不是错误。

    Non-Primary Keys and LINQ to SQL Problems (is this a bug)?

    【讨论】:

      【解决方案2】:

      经过大量研究,我发现这个错误只存在于 .net 3.5 SP1 的 WinXP-Machines 上。 在 Windows 7 上它工作正常。不幸的是,同一个框架有两种不同的版本。

      microsoft 提供了一个修补程序,它解决了我在 xp 机器上的问题。 http://support.microsoft.com/hotfix/KBHotfix.aspx?kbln=ja&kbnum=963657

      问候, 弗洛里安

      【讨论】:

      • 是的,顺便说一句,我在 1 年前的 Windows Vista 机器上无法弄清楚,这几天我会在 Windows 7 上尝试,保持联系:)
      【解决方案3】:

      将您的 DMBL 文件作为 XML 文件打开。检查每一列的类型,看看应该是 int 的东西是否真的是字符串。

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-13
        • 1970-01-01
        • 2011-01-01
        • 2011-01-03
        • 2015-01-17
        相关资源
        最近更新 更多