C# Linq到SQL检索子表引发InvalidCastException
我使用Linq将数据库映射到Sql类。我尝试对它执行一些基本查询,但当我尝试访问子表时,它因InvalidCastException而失败C# Linq到SQL检索子表引发InvalidCastException,c#,sql,linq,C#,Sql,Linq,我使用Linq将数据库映射到Sql类。我尝试对它执行一些基本查询,但当我尝试访问子表时,它因InvalidCastException而失败 var query = (from p in PBZGdb.Instance.AuthenticationDatas where p.Username == "Misha" && p.Password == "123" select new { p.UserA
var query = (from p in PBZGdb.Instance.AuthenticationDatas
where p.Username == "Misha" && p.Password == "123"
select new { p.UserAccount }).AsEnumerable();
UserAccount UA = query.ElementAt(0).UserAccount; //this works!
int count = UA.Characters.Count(); //throws InvalidCastException here
及
如果我只是在异常暂停应用程序几秒钟后尝试继续,它将“检索”数据,并且不会出现问题。以前有人遇到过这样的事情吗?我如何解决它
p、 字符表通过外键链接到UserAccounts。用户帐户可以有多个字符。尝试此操作时会发生什么
var query = (from p in PBZGdb.Instance.AuthenticationDatas
where p.Username == "Misha" && p.Password == "123"
select new { p.UserAccount }).AsEnumerable();
UserAccount UA = query.ElementAt(0).UserAccount; //this works!
var count = UA.Characters.Count(); //throws InvalidCastException here
(注意var而不是int)尝试此操作时会发生什么
var query = (from p in PBZGdb.Instance.AuthenticationDatas
where p.Username == "Misha" && p.Password == "123"
select new { p.UserAccount }).AsEnumerable();
UserAccount UA = query.ElementAt(0).UserAccount; //this works!
var count = UA.Characters.Count(); //throws InvalidCastException here
(注意var而不是int)检查您的列数据类型。在尝试将列中的值指定给属性值时,经常会出现此错误 尝试保持以下映射的一致性 SQL .NET bit -> bool tinyint -> byte smallint -> short int -> int bigint -> long decimal -> decimal money -> decimal float -> double (preferred) | float SQL.NET 比特->布尔 tinyint->byte smallint->short 整数->整数 bigint->long 十进制->十进制 货币->十进制 浮动->双(首选)|浮动 还有其他不一致的映射会抛出相同的错误,但根据我的经验,这些是最常见的情况 问题是,当LINQ-SQL填充属性值时,它只分配值,而不进行转换,并且您将得到与尝试将
short
值分配给int
属性相同的错误
还要检查可能的空值。这些属性在类中应该是可为空的<代码>可空|
int?
检查列数据类型。在尝试将列中的值指定给属性值时,经常会出现此错误
尝试保持以下映射的一致性
SQL .NET
bit -> bool
tinyint -> byte
smallint -> short
int -> int
bigint -> long
decimal -> decimal
money -> decimal
float -> double (preferred) | float
SQL.NET
比特->布尔
tinyint->byte
smallint->short
整数->整数
bigint->long
十进制->十进制
货币->十进制
浮动->双(首选)|浮动
还有其他不一致的映射会抛出相同的错误,但根据我的经验,这些是最常见的情况
问题是,当LINQ-SQL填充属性值时,它只分配值,而不进行转换,并且您将得到与尝试将short
值分配给int
属性相同的错误
还要检查可能的空值。这些属性在类中应该是可为空的<代码>可空的|
int?
好的,伙计们,我想我已经猜到了!!!这真的很奇怪,我不知道为什么/发生了什么,但我指出了我的错误,现在可以纠正了
我用sqlmetal生成了mapping.dbml文件。接下来,当我将其添加到项目中时,我将其重命名。但我认为我对它的重命名不一致(在designer中它显示为myMeta,在cs文件中它命名为myDB,而我在其他地方都使用myDB名称)。这就是所有问题开始发生的时候。只要我把它改回原来的名字,一切都没问题 好了,伙计们,我想我明白了!!!这真的很奇怪,我不知道为什么/发生了什么,但我指出了我的错误,现在可以纠正了
我用sqlmetal生成了mapping.dbml文件。接下来,当我将其添加到项目中时,我将其重命名。但我认为我对它的重命名不一致(在designer中它显示为myMeta,在cs文件中它命名为myDB,而我在其他地方都使用myDB名称)。这就是所有问题开始发生的时候。只要我把它改回原来的名字,一切都没问题 您使用哪种提供商?您在输出中看到*real*SQL查询了吗?您的密码字段是什么类型的?我不确定这里是否有足够的信息;您能否访问单个
字符
记录,即var char=db.Characters.First()
?我想知道这是否仅仅是一个配置错误的列(long vs int,或者是一个不可靠的枚举值,等等),与此无关:p.Password
报警声音集。。。。应该是咸土豆条,really@MichaelNaumov在我看来,数据中的列不匹配。仔细检查所有列/属性映射是否键入正确(特别是容易被忽略的枚举)。您使用什么提供程序?您在输出中看到*real*SQL查询了吗?您的密码字段是什么类型的?我不确定这里是否有足够的信息;您能否访问单个字符
记录,即var char=db.Characters.First()
?我想知道这是否仅仅是一个配置错误的列(long vs int,或者是一个不可靠的枚举值,等等),与此无关:p.Password
报警声音集。。。。应该是咸土豆条,really@MichaelNaumov在我看来,数据中的列不匹配。仔细检查所有列/属性映射的类型是否正确(特别是容易被忽略的枚举)。同样的异常。更有趣的是,当我将鼠标移到UA.Characters(或添加watch表达式)上时,它将给出InvalidCastException,但如果在VS中按Resume几次,它将检索正确的值(即2)并继续正常运行。数据上下文/模型是最新的吗?也许从数据库中得到的信息不太符合逻辑。。。再次尝试从数据库中重新拖动所有内容?相同的异常。更有趣的是,当我将鼠标移到UA.Characters(或添加watch表达式)上时,它将给出InvalidCastException,但如果在VS中按Resume几次,它将检索正确的值(即2)并继续正常运行。数据上下文/模型是最新的吗?也许从数据库中得到的信息不太符合逻辑。。。是否再次尝试从数据库中重新拖动所有内容?