linqTOsql在运行时返回“指定的转换无效”异常

时间:2010-11-16 22:43:00

标签: c# asp.net sql-server asp.net-mvc linq-to-sql

我有两个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

我不明白为什么stacktrace显示int32。我99%确定我一直在使用longbigint来获取所有ID。只是为了涵盖我的所有基础,继承父母和孩子的模型代码:

家长:

[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

     

seTitle nvarchar(255)nullable

     

seOrder bigint notnnull

     

seDateCreated datetime notnull

     

seDateModified datetime notnull

     

StreamID bigint notnull

     

AllowComents位无效

FieldInstance表:

  

ftID bigint notnull

     

ftIsRequired bit notnnull

     

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到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

&GT;

&GT;

&GT;

&GT;

  

0

     

2010-11-16 4:10:45 PM

     

2010-11-16 4:10:45 PM

     

75

     

1 个答案:

答案 0 :(得分:3)

是否有可能在不更新DBML的情况下更新基础数据库中的列类型?