Linq to SQL检索子表引发InvalidCastException

本文关键字:InvalidCastException to SQL 检索 Linq | 更新日期: 2023-09-27 18:19:30

我已经用Linq-To-Sql类映射了数据库。我尝试对它执行一些基本查询,但当我尝试访问子表时,它会以InvalidCastException失败。

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

var query = (from p in PBZGdb.Instance.AuthenticationDatas
                     where p.Username == "Misha" && p.Password == "123"
                     select new
                     {
                         p.UserAccount,
                         p.UserAccount.Characters
                     }) .AsEnumerable();
UserAccount UA = query.ElementAt(0).UserAccount; //throws InvalidCastException here

如果我只是在异常暂停应用程序几秒钟后尝试继续,它会"检索"数据并毫无问题地继续。以前有人遇到过这样的事情吗?我该如何解决?

p.s.Characters表通过外键链接到UserAccounts。一个UserAccount可以有多个字符。

Linq to SQL检索子表引发InvalidCastException

尝试此操作时会发生什么?

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.NETbit->booltinyint->字节smallint->shortint->intbigint->longdecimal->decimal货币->十进制float->double(首选)| float

还有其他不一致的映射会抛出相同的错误,但根据我的经验,这些是最常见的情况。

问题是,当LINQ-SQL填充您的属性值时,它只会分配值,而不会转换它,您会得到与尝试将short值分配给int属性相同的错误。

还要检查可能的空值。这些属性在类中应该是可以为null的。Nullable<int>|int?

好吧,伙计们,我想我已经想好了!!!这真的很奇怪,我不知道为什么/发生了什么,但我确定了我的错误,现在可以纠正了。

我用sqlmetal生成了映射.dbml文件。接下来,当我把它添加到项目中时,我重命名了它。但我认为我重命名它不一致(在设计器中,它显示为myMeta,在cs文件中,它被命名为myDB,我在其他地方都使用myDB名称)。这就是所有问题开始发生的时候。当我把它改回原来的名字时,一切都没问题!

相关文章:
  • 没有找到相关文章