2015-06-11 13 views
12

Truy vấn LINQ-to-SQL chọn trường từ khung nhìn SQL Server trong chương trình C# chạy trên cơ sở dữ liệu SQL Server 2008, chạy tốt trong môi trường dev cục bộ của tôi, tạo ra một ngoại lệ khi chạy trong môi trường dàn dựng:Điều gì có thể gây ra một EntityCommandExecutionException trong EntityCommandDefinition.ExecuteStoreCommands?

Exception Message: An error occurred while executing the command definition. See the inner exception for details. 

Exception Trace: System.Data.Entity.Core.EntityCommandExecutionException 
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.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) 
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.b__5() 
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..GetEnumerator>b__0() 
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 [my code ...] 

Điều gì gây ra ngoại lệ này xảy ra?

Trả lời

14

Điều này có thể do truy vấn LINQ cố gắng chọn trường không thực sự tồn tại trên chế độ xem hoặc bảng cơ sở dữ liệu đích.

Một cách điều này có thể xảy ra (đó là vấn đề trong trường hợp của tôi) là bỏ qua để triển khai môi trường đích một di chuyển khung thực thể gần đây đã tạo thêm trường mới vào dạng xem được truy vấn.

Một điều cần xem xét là ngoại lệ bên trong của đối tượng EntityCommandExecutionException được ném (như được đề xuất bởi thông báo lỗi). Trong trường hợp này, ngoại lệ bên trong là kiểu SqlException và có thông báo hữu ích Invalid column name ‘[my column name]’.

Vì vậy, điều cần xem xét khi một EntityCommandExecutionException tại EntityCommandDefinition.ExecuteStoreCommands bị ném khi chạy một truy vấn LINQ-to-SQL:

  • Kiểm tra ngoại lệ bên trong (theo đề nghị của thông báo lỗi ngoại trừ bên ngoài của).
  • Đảm bảo tất cả các di chuyển Khung thực thể đã được triển khai sang môi trường đích (nếu EF đang được sử dụng).
  • Kiểm tra xem liệu truy vấn có đang cố gắng chọn một trường không tồn tại hay không.
6

Điều này có thể do thiếu "Multiple Active Result Sets" trong chuỗi kết nối.

Nhiều bộ kết quả hoạt động (MARS) là một tính năng cho phép thực hiện nhiều đợt trên một kết nối. Trong các phiên bản trước, chỉ có thể thực hiện một đợt tại một thời điểm đối với một kết nối duy nhất. Thực hiện nhiều lô với MARS không ngụ ý thực hiện đồng thời các hoạt động.

Để Fix:

string connectionString = "Data Source=MSSQL1;" + 
"Initial Catalog=AdventureWorks;Integrated Security=SSPI;" + 
"MultipleActiveResultSets=True"; 
+0

Cảm ơn bạn !!! đã làm cho tôi –

0

nhớ giúp truy cập vào các tài sản địa phương như thế nào. Ngoại lệ:

foreach (var myTableObject in context.Table) 
{ 
    // Exception 
} 


foreach (var myTableObject in context.Table.Local) 
{ 
    // No exception 
} 
Các vấn đề liên quan