yeomandev
yeomandev

Reputation: 11806

linqTOsql returning a "specified cast not valid" exception at runtime

I have two linqTOsql entities that has a parent and child relationship, one to many. I'm running into an issue that when I retrieve the parent record, I am unable to loop through the related records in the child table.

This code fails:

    public string test()
    { 
        string output;
        StreamEntry entry = genesisRepository.StreamEntries.FirstOrDefault(x => x.seID == 6);

        output = entry.seUrl.ToString() + "<br />";
        foreach(var item in entry.FieldInstance)
        {

            output = "<ul>";
            output += "<li>" + item.fiLabel.ToString() + "</li>";
            output = "</ul>";
        }
        return output;
    }

The error is:

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidCastException: Specified cast is not valid.

Source Error: 


Line 230:            
Line 231:            output = entry.seUrl.ToString() + "<br />";
Line 232:            foreach(var item in entry.FieldInstance)
Line 233:            {
Line 234:                


Source File: C:\pathtoscript.cs    Line: 232 

Stack Trace: 


[InvalidCastException: Specified cast is not valid.]
   System.Data.SqlClient.SqlBuffer.get_Int32() +5002837
   System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i) +38
   Read_FieldInstance(ObjectMaterializer`1 ) +1993
   System.Data.Linq.SqlClient.ObjectReader`2.MoveNext() +32
   System.Data.Linq.EntitySet`1.Load() +124
   System.Data.Linq.EntitySet`1.GetEnumerator() +13

I don't understand why the stacktrace is showing int32. I'm 99% certain that I have been using long and bigint for all my IDs. Just to cover all my bases, heres the parent and child model code:

Parent:

[Table]
public class StreamEntry
{
    [HiddenInput(DisplayValue = false)]
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
    public long seID { get; set; }

    /* other fields removed for brevity  */

    // relationship (one entry to many FieldInstances) 
    // uses EntitySet<FieldInstance> and OtherKey for the FK in FieldInstance 
    // which is the "Other" table.
    private EntitySet<FieldInstance> _FieldInstance = new EntitySet<FieldInstance>();
    [System.Data.Linq.Mapping.Association(Storage = "_FieldInstance", OtherKey = "fiStreamEntryID")]
    public EntitySet<FieldInstance> FieldInstance
    {
        get { return this._FieldInstance; }
        set { this._FieldInstance.Assign(value); }
    }

}

Child:

[Table]
public class FieldInstance
{
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
    public long fiID { get; set; }

   /* Other field removed for brevity */ 

    [Column]
    public long fiStreamEntryID { get; set; }  // FK

    // Relationship (many FieldInstances to one StreamEntry)
    // using EntityRef<StreamEntry> and ThisKey
    // which is "This" table's FK
    private EntityRef<StreamEntry> _StreamEntry;
    [System.Data.Linq.Mapping.Association(Storage = "_StreamEntry", ThisKey = "fiStreamEntryID")]
    public StreamEntry StreamEntry
    {
        get { return this._StreamEntry.Entity; }
        set { this._StreamEntry.Entity = value; }
    }
}

What could be causing my cast exception?

Edit - adding table definitions

StreamEntry Table:

seID bigint notnull

seUrl nvarchar(255) notnull

seHeadline nvarchar(255) notnull

seBody ntext nullable

seDescription nvarchar(255) nullable

seKeywords nvarchar(255) nullable

seTitle nvarchar(255) nullable

seOrder bigint notnull

seDateCreated datetime notnull

seDateModified datetime notnull

StreamID bigint notnull

AllowComents bit notnull

FieldInstance Table:

ftID bigint notnull

ftIsRequired bit notnull

ftLabel nvarchar(50) notnull

ftStrValue nvarchar(1000) nullable

ftDateTimeValue datetime nullable

ftIntValue int nullable

ftDecValue decimal(18,0) nullable

ftOrder bigint notnull

ftStreamEntryID bigint notnull --- FK to StreamEntry table

ftFieldTypeID bigint notbull

Edit - Added StreamEntry Record

This code:

   public string test()
    { 
        string output;
        StreamEntry entry = genesisRepository.StreamEntries.FirstOrDefault(x => x.seID == 6);

        output = entry.seID.ToString() + "<br />";
        output += entry.seUrl + "<br />";
        output += entry.seHeadline + "<br />";
        output += entry.seBody + "<br />";
        output += entry.seDescription + "<br />";
        output += entry.seKeywords + "<br />";
        output += entry.seTitle + "<br />";
        output += entry.seOrder.ToString() + "<br />";
        output += entry.seDateCreated.ToString() + "<br />";
        output += entry.seDateModified.ToString() + "<br />";
        output += entry.StreamID.ToString() + "<br />";
        output += entry.AllowComments.ToString() + "<br />";

        return output;
    }

Returns:

6

asd

asd

>

>

>

>

0

2010-11-16 4:10:45 PM

2010-11-16 4:10:45 PM

75

False

Upvotes: 3

Views: 1873

Answers (1)

Abe Miessler
Abe Miessler

Reputation: 85126

Is it possible that you updated the column type in your underlying database without updating your DBML?

Upvotes: 3

Related Questions