作为主键的十进制在Dev(Win7/64bit)中工作但在生产中不起作用(Win2008R2/64bit)公共语言运行时检测到无效程序

kin*_*ngo 6 .net windows-services ef-code-first entity-framework-4.3

我的Windows服务是一个.NET应用程序.该服务依赖于我使用EF 4.3 Code First的数据访问.我的服务运行并尝试访问数据时收到以下错误.

FullPurgeAndReplace()中发生错误:System.InvalidProgramException:公共语言运行时检测到无效程序.在System.Data.Entity.DynamicProxies.MOMInventoryItem_3ED5D5176D2C03867C62DD8E4381A882350CFD9CD931F3CD551623A6EF5C4D8E.set_Id(十进制)在lambda_method(封闭,牛头刨床)在System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly [TEntity](Func键1.ReadNextElement(整形器整形器)在系统.Data.Common.Internal.Materialization.Shaper 1..ctor(IEnumerable 1 source)...更多删除2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper ) at System.Data.Common.Internal.Materialization.Coordinator
1.SimpleEnumerator.MoveNext() at System.Collections.Generic.List1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable

在相同的机器上我有一个依赖于相同数据访问项目的Web应用程序,并且运行没有问题.对于IIS中的该网站,我确实为相应的应用程序池检查了启用32位应用程序.

我研究了这个问题,发现它可能与错误中的实体(MOMInventoryItem)有一个十进制主键有关.我没有选择,因为我正在与现有系统集成.然而,据推测,这是一年多以前EF 4.0的一个已知问题,我希望它现在可以解决.

以下是我的实体的一些代码:

[Table("STOCK")]
public class MOMInventoryItem
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None), Column("STOCK_ID")]
    public virtual decimal Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

同样,这可以通过IIS中托管的MVC应用程序正常工作,但在同一台Windows 2008 R2服务器上作为Windows服务失败.它也适用于我的DEV机器(Win7/VS11). 我的问题是什么,我可以永久地解决它还是解决它?

一如往常,在可能的情况下,非常感谢和回报.

lep*_*pie 2

尝试将启动项目设置为目标 32 位,这应该可以防止明显的 64 位问题。并解释为什么它在 MVC 中运行良好。