【问题标题】:InvalidProgramException using Entity使用实体的 InvalidProgramException
【发布时间】:2012-04-19 18:32:15
【问题描述】:

我不断收到 InvalidProgramException 试图通过实体框架获取数据。

using (var db = new Entities())
{
    var utrs = from u in db.users_to_roles
               select u; // utrs.Count() > 1 at this point. So, there IS data!

    users_to_roles utr = utrs.FirstOrDefault(); // InvalidProgramException!
    utrs.GetEnumerator(); // InvalidProgramException!
    utrs.ToList(); // InvalidProgramException!
}

表格很简单:

CREATE TABLE `users_to_roles` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `userid` bigint(20) NOT NULL,
  `roleid` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fkuserid` (`userid`),
  KEY `FK22FCE45052C7D0B5` (`roleid`),
)

其他表没有这个问题。我错过了什么?

异常:System.InvalidProgramException - “公共语言运行时检测到无效程序。”

堆栈跟踪:

 at System.Data.Entity.DynamicProxies.users_to_roles_026CF8D248576FA69379B3C621F372FAF9B6F2E4794C8490AE27BABE54609FF1.set_id(Decimal )
       at lambda_method(Closure , Shaper )
       at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
       at lambda_method(Closure , Shaper )
       at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
       at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
       at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
       at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
       at Users.Lib.DAOs.Mysql.MysqlUserDAO.RemoveRoleFromUser(String email, String roleName) in C:\Work\Users.Lib\DAOs\Mysql\MysqlUserDAO.cs:line 242       

编辑

解决方案,感谢下面的@Quintin。我的实体中的“id”列被映射到十进制而不是 Int64。不知道它是怎么做到的,但问题已经解决了!

【问题讨论】:

  • 请发布有关异常的详细信息,尤其是其内部异常
  • 不幸的是,内部异常为空。请参阅上面发布的堆栈跟踪。
  • 好吧没看到那个来了,异常本身是什么?
  • 您的任何其他表是否具有未签名的 bigint(20) 数据类型?...我怀疑是映射问题让 jit 吓坏了。
  • 感谢@Quintin Robinson,这是一个映射问题。其中一项被映射到十进制而不是 Int64。我从没想过去看那里,因为我认为它首先会正确映射。谢谢!

标签: c# mysql entity-framework exception


【解决方案1】:

【讨论】:

  • 可能相关。最初的问题是因为从 long 到 decimal 的映射不正确。但是,如果我从 long 映射到 int (我的键还不够大),我不会得到异常。所以,看起来它与主键/十进制组合直接相关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多