linqTOsql возвращает исключение «указанное приведение не допустимо» во время выполнения - PullRequest
3 голосов
/ 17 ноября 2010

У меня есть две сущности linqTOsql, которые имеют родительские и дочерние отношения, один ко многим.Я сталкиваюсь с проблемой, что, когда я получаю родительскую запись, я не могу перебрать связанные записи в дочерней таблице.

Этот код завершается ошибкой:

    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;
    }

Ошибкаэто:

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

Я не понимаю, почему трассировка стека показывает int32.Я на 99% уверен, что я использовал long и bigint для всех моих идентификаторов.Просто чтобы покрыть все мои базы, вот код модели родителя и потомка:

Родитель:

[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); }
    }

}

Дочерний элемент:

[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; }
    }
}

Что может быть причиной моего исключения приведения?

Редактировать - добавить определения таблиц

Таблица StreamEntry:

seID bigint notnull

seUrl nvarchar (255) notnull

seHeadline nvarchar (255) notnull

seBody ntext nullable

seDescription nvarchar (255) nullable

seKeywords nvarchar (255) nullable

searitle nitle) nullable

seOrder bigint notnull

seDateCreated datetime notnull

seDateModified datetime notnull

StreamID bigint notnull

AllowComents bit notnull

1050 *

Таблица FieldInstance:

ftID bigint notnull

ftIsRequired bit notnull

ftLabel nvarchar (50) notnull

ftStrValue nvarchar(1000) обнуляемый

ftDateTimeValue datetime обнуляемый

ftIntValue int nullable

ftDecValue decimal (18,0) nullable

ftOrder bigint notnull

ftStreamEntryID bigint notnull --- таблица FK для StreamEntry

ftFieldTypeID bigint notbull

Редактировать - добавлена ​​запись StreamEntry

Этот код:

   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;
    }

Возвращает:

6

asd

asd

>

>

>

>

0

2010-11-16 16:10:45

2010-11-16 16:10:45

75

False

1 Ответ

3 голосов
/ 17 ноября 2010

Возможно ли, что вы обновили тип столбца в вашей базовой базе данных без обновления вашего DBML?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...