2016-12-24 4 views
0

EF6を使用して.NET Web API経由でSQLデータを取得する比較的簡単なアプリケーションがあります。保護されたメモリを読み書きしようとしました - .NET EF + Web API

製品

CREATE TABLE [dbo].[Product] 
(
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [varchar](255) NOT NULL, 
    [FullName] [varchar](max) NOT NULL, 
    [Description] [varchar](max) NOT NULL, 
    [BranchID] [int] NOT NULL, 
    [ProgramID] [int] NOT NULL, 
    [TechnologyPlatformID] [int] NOT NULL, 
    [StatusID] [int] NOT NULL, 
    [FunctionID] [int] NOT NULL, 
    [ProgramManagerID] [int] NOT NULL, 
    [TypeID] [int] NOT NULL, 
    [Vendor] [varchar](max) NOT NULL, 
    [VendorPOC] [varchar](max) NOT NULL, 
    [URL] [varchar](255) NULL, 
    [Code] [varchar](50) NULL, 
    [CreatedBy] [int] NOT NULL, 
    [CreateDate] [datetime] NOT NULL, 
    [ModifiedBy] [int] NOT NULL, 
    [ModifiedDate] [datetime] NOT NULL, 

    CONSTRAINT [PK_Product] 
     PRIMARY KEY CLUSTERED ([ID] ASC) 
        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
GO 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [dbo].[Product] WITH CHECK 
    ADD CONSTRAINT [FK_Product_Function] 
    FOREIGN KEY([FunctionID]) REFERENCES [dbo].[Function] ([ID]) 
GO 

ALTER TABLE [dbo].[Product] CHECK CONSTRAINT [FK_Product_Function] 
GO 

ALTER TABLE [dbo].[Product] WITH CHECK 
    ADD CONSTRAINT [FK_Product_Program] 
    FOREIGN KEY([ProgramID]) REFERENCES [dbo].[Program] ([ID]) 
GO 

ALTER TABLE [dbo].[Product] CHECK CONSTRAINT [FK_Product_Program] 
GO 

プログラム:

CREATE TABLE [dbo].[Program] 
(
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [varchar](255) NOT NULL, 

    CONSTRAINT [PK_Program] 
     PRIMARY KEY CLUSTERED ([ID] ASC) 
        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 

SET ANSI_PADDING OFF 
GO 

機能:

CREATE TABLE [dbo].[Function] 
(
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [varchar](255) NOT NULL, 
    [Description] [varchar](max) NOT NULL, 

    CONSTRAINT [PK_Function_1] 
     PRIMARY KEY CLUSTERED ([ID] ASC) 
        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
GO 

マイEDMXは正常になります。

、データベース内の3つのテーブルがあります。

enter image description here

そして、ここで私は私のレポでデータにアクセスしています方法は次のとおりです。

enter image description here

GetProducts()を呼び出すときに突然、私は次のエラーを取得しています:

未処理の例外「System.AccessViolationException」タイプの「不明なモジュール」で発生しました。

追加情報:保護されたメモリを読み書きしようとしました。これはしばしば、他のメモリが壊れていることを示します。

私はこの原因を突き止めることはできません。ここで私が試したものだ: "...抑制するJITの最適化" を確認しました

  • を修理し、.NET Frameworkは、しかし...私のローカルマシン上でVS

どちらも働いていた未確認でしたSQLのFunctionテーブルを削除してEDMXを更新すると、問題は解決されます。なぜこのテーブルが問題を引き起こしているのでしょうか?

ありがとうございました!

答えて

0

プロキシの生成をオフにして、同じ問題がまだ発生するかどうかを確認してください。

最初にProgram.Include(x => x.Program)経由で送信していますが、Functionナビゲーションプロパティが遅延プロパティにプロキシされている可能性があります。 WebAPIがシリアル化しようとすると、エラーが発生します。

+0

迅速な対応をありがとうございます。 OnContextCreatedメソッドでプロキシ生成を無効にしましたが、まだエラーが発生しています。 –

関連する問題