我有两个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%确定我一直在使用long
和bigint
来获取所有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
此代码:
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
假
答案 0 :(得分:3)
是否有可能在不更新DBML的情况下更新基础数据库中的列类型?