I have two linqTOsql elements that have parent and child relationships, one for many. I ran into a problem that when I retrieve the parent record, I cannot iterate over related records in the child table.
This code does not work:
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;
}
Error:
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 do not understand why the stack is displayed int32. I'm 99% sure that I use long, and bigintfor all of their IDs. Just to cover all my databases, 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; }
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; }
[Column]
public long fiStreamEntryID { get; set; }
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 the reason for my exception exception?
Edit - Add 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 for StreamEntry table
ftFieldTypeID bigint notbull
Edit - StreamEntry entry added
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;
}
Return:
6
ASD
ASD
<P → <P → <P → <P →0
2010-11-16 4:10:45 PM
2010-11-16 4:10:45 PM
75
False