2015-02-05 1 views
0

SQL Server 2012에 데이터베이스 뷰를 추가했습니다.이 EntityFramework (v6) 모델을 업데이트 한 후 빌드하고 유효성을 검사했습니다. ASP.Net WebAPI (v2) 프로젝트에서이 최신 업데이트를 참조하고 있는지 확인하기 위해 참조를 제거하고 EntityFramework 라이브러리를 추가했습니다. 콘트롤러에는 컨텍스트와 EF 모델 클래스에 대한 모든 올바른 링크가 있습니다. . 다음과 같은 오류가의 InnerException에 반환되는 런타임시WebAPI 컨트롤러가 실행될 때 EntityFramework 6 모델이 반영되지 않음

public IEnumerable<RTV_DedicationComments> Get(int EntryNum) 
    { 
     //var query = from c in context.RTV_GetAllDedicationsNames orderby c.DedicationName where c.DedicationName.StartsWith(Name) select c; 
     var query = context.RTV_DedicationComments 
          .Where(d => d.EntryNumber == EntryNum) 
          .OrderBy(d => d.EntryNumber) 
          .Select(d => d); 

     var results = query.ToList(); 

     return results; 
    } 

: { "잘못된 열 이름 'PlatEntryNumber는'\ 연구 \ nCould 뷰 또는 함수를 사용하지 난이 GET 방식에서 만든 업데이트를 참조에 오류가 없습니다 때문에 바인딩 오류 'dbo.RTV_DedicationComments' "} 쿼리가 실행됩니다.

'PlatEntryNumber'는 데이터베이스와 업데이트에 앞서 EF 모델 출신

var results = query.ToList(); 
이가 제거 된 UT하고 표시되지 않습니다 컨트롤러의 dbcontext 필드입니다.

나는 쿼리가 실행 된 경우 확인하기 위해 SQL 서버 프로파일 켜져 있고 그것은했다 :

exec sp_executesql N'SELECT 
[Project1].[EntryNumber] AS [EntryNumber], 
[Project1].[CommentDate] AS [CommentDate], 
[Project1].[Comment] AS [Comment], 
[Project1].[CommentBy] AS [CommentBy] 
FROM (SELECT 
    [Extent1].[EntryNumber] AS [EntryNumber], 
    [Extent1].[CommentDate] AS [CommentDate], 
    [Extent1].[Comment] AS [Comment], 
    [Extent1].[CommentBy] AS [CommentBy] 
    FROM (SELECT 
[RTV_DedicationComments].[EntryNumber] AS [EntryNumber], 
[RTV_DedicationComments].[CommentDate] AS [CommentDate], 
[RTV_DedicationComments].[Comment] AS [Comment], 
[RTV_DedicationComments].[CommentBy] AS [CommentBy] 
FROM [dbo].[RTV_DedicationComments] AS [RTV_DedicationComments]) AS [Extent1] 
    WHERE ([Extent1].[EntryNumber] = @p__linq__0) AND (@p__linq__0 IS NOT NULL) 
) AS [Project1] 
ORDER BY [Project1].[EntryNumber] ASC',N'@p__linq__0 int',@p__linq__0=5943651 
나는 WebAPI와 EF 사이의 이러한 데이터베이스 객체 참조의 잔재를 제거 확인할 수 있습니다 다른 무엇

?

System.Data.Entity.Core.EntityCommandExecutionException was unhandled by user code 
    HResult=-2146232004 
    Message=An error occurred while executing the command definition. See the inner exception for details. 
    Source=EntityFramework 
    StackTrace: 
     at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) 
     at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues) 
     at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__a() 
     at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) 
     at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__9() 
     at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation) 
     at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) 
     at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() 
     at System.Lazy`1.CreateValue() 
     at System.Lazy`1.LazyInitValue() 
     at System.Lazy`1.get_Value() 
     at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext() 
     at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
     at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
     at RecWebAPI.Controllers.RTV_GetDedicationCommentsController.Get(Int32 PlatEntryNum) in e:\Development Test\RecTaxWebSLN3\RecWebAPI3\Controllers\RTV_GetDedicationCommentsController.cs:line 43 
     at lambda_method(Closure , Object , Object[]) 
     at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters) 
     at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments) 
     at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken) 
    InnerException: System.Data.SqlClient.SqlException 
     HResult=-2146232060 
     Message=Invalid column name 'PlatEntryNumber'. 
Could not use view or function 'dbo.RTV_DedicationComments' because of binding errors. 
     Source=.Net SqlClient Data Provider 
     ErrorCode=-2146232060 
     Class=16 
     LineNumber=3 
     Number=207 
     Procedure=RTV_DedicationComments 
     Server=mysqlserver 
     State=1 
     StackTrace: 
      at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 
      at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 
      at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 
      at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) 
      at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() 
      at System.Data.SqlClient.SqlDataReader.get_MetaData() 
      at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) 
      at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) 
      at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) 
      at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) 
      at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) 
      at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) 
      at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) 
      at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<>c__DisplayClassb.<Reader>b__8() 
      at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TInterceptionContext,TResult](Func`1 operation, TInterceptionContext interceptionContext, Action`1 executing, Action`1 executed) 
      at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext) 
      at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior) 
      at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) 
      at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) 
     InnerException: 
+0

IEnumerable 대신 List를 반환 해 보셨습니까? – lucuma

+0

IEnumerable은 다른 모든 Get 메서드를 사용하고 있습니다.이 메서드는 fieldname을 변경하기 전에 성공적으로 작업 했으므로이를 시도하지 않았습니다. – user2589090

+0

목록을 반환하면 같은 오류가 발생했습니다. – user2589090

답변

0

문제는 내 WebAPI의 web.config 파일로했다 :

여기에 전체 스택 추적입니다. 태그에 이전 데이터베이스를 가리키는 태그가 있습니다. 이것은 EF가 데이터베이스에 대한 모든 연결을 처리하고 WebAPI가 데이터베이스 정보를 가질 필요가 없기 때문에 다소 혼란 스럽습니다. 지금 일하고있다.

관련 문제