Invalid Cast Exception, Gespeicherte Prozedur, LINQ TO SQL

9 Monate später das gleiche problem wieder auftaucht. Ich habe versucht, alles, was ich denken kann:

  • Ich cast (varchar(max) für die gespeicherte Prozedur;
  • Ich habe die mapping;
  • versucht zu finden, die Sammlung linq funktioniert mit, konnte Sie aber nirgends finden;

Ich betreibe diese gespeicherte Prozedur für einige Zeit das Mapping zu meiner Objekte über LINQ to SQL, und jetzt, ganz plötzlich, LINQ versucht zu casten das Feld 'Wert' als verdoppeln.


der Fehler:

specified cast is not valid    
   System.Data.SqlClient.SqlBuffer.get_Double()
   System.Data.SqlClient.SqlDataReader.GetDouble(Int32 i)
   Read_Field(ObjectMaterializer`1 )
   System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
   System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
   CmsCsharp.BL.FieldManager.FindContentField(Int32 id_content, Int32 id_fieldType, String fieldName) 

die Methoden

public static Field FindContentField(int id_content, int id_fieldType, string fieldName)
            {
                using (DbBase conn = new DbBase())
                {
                    try
                    {
                        return conn.ClientDB.sprocFindContentField(id_content, id_fieldType, fieldName).Single();
                    }
                    catch (Exception e)
                    {
                        return null;
                    }
                }
            }



[Function(Name = "dbo.sprocFindContentField")]
        public ISingleResult<Field> sprocFindContentField([Parameter(DbType="Int")] System.Nullable<int> id_content, [Parameter(DbType="Int")]System.Nullable<int> id_fieldType, [Parameter(DbType="Varchar(255)")]string fieldName)
        {
            IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), id_content, id_fieldType, fieldName);
            return ((ISingleResult<Field>)(result.ReturnValue));
        }

Bereich:

public class TextField : Field
{
   private string _Value;

    [Column(Storage="_Value", DbType="VarChar(MAX) NOT NULL", Name="value", CanBeNull=true)]
    public string Value
    { //get and set }
}

das Verfahren:

  SELECT 
         type = 'textField',
         fieldLabel.id_fieldEditor,
         fieldLabel.id_fieldType ,
         fieldLabel.description,
         fieldLabel.id ,         
         sessionField.id  AS relationId,
         fieldLabel.name ,
         fieldText.content AS value,
         fieldText.id  AS valueId,
         cf.id as contentRelationId
  FROM
         fieldLabel
  INNER JOIN
         sessionField
  ON
         sessionField.id_fieldLabel = fieldLabel.id
  INNER JOIN
        cms_contentField AS cf
  ON
        cf.id_sessionField = sessionField.id
  INNER JOIN
         fieldText
  ON
         fieldText.id = cf.id_fieldValue
  INNER JOIN
        fieldType
  ON
        fieldLabel.id_fieldType = fieldType.id
  INNER JOIN
        fieldTable
  ON
        fieldTable.id = fieldType.id_fieldTable
  WHERE
         cf.id_content = @id_content
  AND
        fieldTable.id = 1
Aus Neugier... was aus, die Fehlermeldung deutete Sie an diesem bestimmten Feld?
Könnte Sie posten Sie Ihre Datenbank-Tabelle schema?
Marcg Gravell: Weil, wenn ich entfernen Sie die Zuordnung zu dem Feld, wird die Ausnahme nicht ausgelöst.
Gute Antwort ;-p
id_fieldEditor int, id_fieldType int, Bezeichnung varchar(1500), id int, relationId int, name varchar(255), value varchar(max), valueId int, int contentRelationId

InformationsquelleAutor Eduardo Mello | 2009-06-22

Schreibe einen Kommentar