2009-08-31 51 views
19

Ứng dụng MVC của tôi trả về SqlExceptions khi cố truy cập vào bất kỳ bảng nào trong cơ sở dữ liệu của tôi.System.Data.SqlClient.SqlException: Tên đối tượng không hợp lệ 'dbo.Projects'

Chi tiết ngoại lệ: System.Data.SqlClient.SqlException: Tên đối tượng không hợp lệ 'dbo.Projects'.

Ứng dụng của chúng tôi là LINQ cho lớp dữ liệu.

Nếu tôi sử dụng một dll cũ nó hoạt động tốt, (do đó không có vẻ là một vấn đề với DB) chỉ dll ứng dụng mới nhất mà tôi đã tải lên.

chi tiết

[SqlException (0x80131904): tên đối tượng không hợp lệ 'dbo.Projects'.]
System.Data.SqlClient.SqlConnection.OnError (SqlException ngoại lệ, Boolean breakConnection) 1.950.890
System.Data.SqlClient.SqlInternalConnection.OnError (SqlException ngoại lệ, Boolean breakConnection) 4.846.875
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj) 194 System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader Datastream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 2392
System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33
System.Data.SqlClient.SqlDataReader.get_MetaData() +83
System.Data.SqlClient.SqlCommand.FinishExecuteReader (ds SqlDataReader, runBehavior runBehavior, string resetOptionsString) 297
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) 954
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String phương pháp, kết quả DbAsyncResult) 162
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, runBehavior runBehavior, Boolean returnStream, string phương pháp) 32
System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior hành vi, string phương pháp) 141
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior hành vi) +12 System.Data.Common.DbCommand.ExecuteReader () 12
System.Data.Linq.SqlClient.SqlProvider.Execute (query Expression, QueryInfo queryInfo, nhà máy IObjectReaderFactory, Object [] parentArgs, Object [] userArgs, ICompiledSubQuery [] subqueries, Object LASTRESULT) 975
System.Data.Linq.SqlClient.SqlProvider.ExecuteAll (query Expression, QueryInfo [] queryInfos, nhà máy IObjectReaderFactory, Object [] userArguments, ICompiledSubQuery [] subqueries) 113
System.Data.Linq.SqlClient.SqlProvider. System.Data.Linq.Provider.IProvider.Execute (Biểu thức truy vấn) +344
System.Data.Linq.DataQuery 1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +35 System.Linq.Buffer 1 .. ctor (IEnumerable 1 source) +247 System.Linq.<GetEnumerator>d__0.MoveNext() +108
System.Linq.Buffer
1..ctor (IEnumerable 1 source) +259
System.Linq.<GetEnumerator>d__0.MoveNext() +108
System.Collections.Generic.List
1 ..ctor (IEnumerable 1 collection) +7665172 System.Linq.Enumerable.ToList(IEnumerable 1 nguồn) +61 Mezza_crm.Controllers.ProjectsController.GetProjectList (mẫu NameValueCollection) trong C: \ mezza_crm \ mezza_crm \ Controller \ ProjectsController.cs: 164 Mezza_crm.Controllers.ProjectsController.List() trong C: \ mezza_crm \ mezza_crm \ controller \ ProjectsController.cs: 53
lambda_method (ExecutionScope, ControllerBase, Object []) +39
System.Web.Mvc.ActionMethodDispatcher.Execute (ControllerBase điều khiển, Object [] thông số) 17
System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, IDictionary thông số) +24
System.Web.Mvc. <> c__DisplayClassa.b__7() 52 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (IActionFilter lọc, ActionExecutingContext preContext, Func 1 continuation) +254
System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
1 bộ lọc, ActionDescriptor actionDescriptor, thông số IDictionary`2) 192
System.Web.Mvc .ControllerActionInvoker.InvokeAction (controllerContext controllerContext, string actionName) 399
System.Web.Mvc.Controller.ExecuteCore() +126
System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) 27 System.Web .Mvc.ControllerBase.System.Web.Mvc.IController.Execute (RequestContext requestContext) +7
System.Web.Mvc.MvcHandler.ProcessRequest (HttpContextBase HttpContext) 151 System.Web.Mvc.MvcHandler.ProcessRequest (HttpContext HttpContext) 57
System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest (HttpContext HttpContext) +7
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 181 System.Web.HttpApplication.ExecuteStep (IExecutionStep bước, Boolean & completedSynchronously) +75

Trả lời

3

Bạn có quyền truy cập vào Máy chủ SQL bạn đang truy vấn không? Bạn có thấy Bảng hoặc Chế độ xem được gọi là dbo.Projects ở đó không? Nếu không, đó sẽ là một nơi tốt để xem xét.

LINQ to SQL tạo bản đồ đối tượng giữa cơ sở dữ liệu và ứng dụng. Nếu DLL mới của bạn mà bạn đang triển khai không phù hợp với cơ sở dữ liệu nữa, thì đây là loại lỗi mà bạn mong muốn nhận được.

Bạn có lẽ có các lược đồ cơ sở dữ liệu khác nhau giữa môi trường phát triển và môi trường triển khai không?

+0

Yep dbo.Project tồn tại và không thay đổi kể từ lần phát hành cuối cùng. Tôi đã thực hiện một vài thay đổi đối với một bảng khác và thêm hai bảng. Nhưng tôi đã phản ánh những thay đổi trong DB trên máy chủ. Thông thường tôi nhận được một cái gì đó như thế này nếu tôi thực hiện một thay đổi trong dev và quên để phản ánh sự thay đổi trên máy chủ. System.Data.SqlClient.SqlException: Tên cột không hợp lệ 'Thực tế'. Nhưng khi tôi sửa bảng, nó thường hoạt động. Cảm ơn bạn đã trả lời nhanh chóng. –

42

Kiểm tra tham số Catalogue ban đầu trong chuỗi kết nối của bạn. Có thể là mã của bạn đang tìm kiếm cơ sở dữ liệu sai cho đối tượng Projects. Ví dụ, nếu bạn có thiết lập đồng bộ hóa cơ sở dữ liệu theo cách sao cho chỉ một tập hợp con của bảng cơ sở dữ liệu chính được chuyển, bạn có thể gặp phải lỗi này nếu LINQ to SQL mong đợi tất cả các bảng nằm trong cơ sở dữ liệu được trỏ tới bằng chuỗi kết nối.

+1

Chuỗi kết nối là tốt. Web.Config đã không thay đổi kể từ lần phát hành cuối cùng và bản phát hành cuối cùng hoạt động tốt. –

+10

+1 đây là vấn đề của tôi. d'oh! – fearofawhackplanet

+0

Làm theo hướng dẫn từ Azure và sao chép chuỗi kết nối từ cổng Azure là sai. Đúng, hoặc những gì tôi mô hình sau, đã ở đây https://azure.microsoft.com/en-us/documentation/articles/sql-database-dotnet-cách sử dụng. Điều này chắc chắn đã giúp tôi chỉ đúng hướng, cảm ơn. – Mark

0

Nếu bạn sử dụng hai cơ sở dữ liệu, bạn có thể thêm DataClasses.dbml và ánh xạ cơ sở dữ liệu thứ hai vào đó.
Nó hoạt động.

0

Nguyên nhân của sự cố này có thể là cài đặt thuộc tính của cơ sở dữ liệu (Sql2008R2 với .NET4).

  • Vấn đề có thể lặp lại theo ý muốn khi thay đổi giá trị COLLATION của cơ sở dữ liệu.

Để hiển thị COLLLATION, hãy sử dụng Sql Server Mgmt Studio.

  • Kích chuột phải vào cơ sở dữ liệu và chọn Properties -> General, Sau đó, nhìn dưới Maintenance cho giá trị COLLATION

Để thay đổi collation, (vẫn) sử dụng Sql Server Mgmt Studio.

  • Kích chuột phải vào cơ sở dữ liệu và chọn Properties -> Options, Từ đó, bạn có thể thay đổi giá trị COLLATION
+1

Giả sử thay đổi nó thành gì? – Ciwan

+0

colation phù hợp là gì – toha

0

Xóa bảng _MigrationHistory trong (yourdatabseName> Bàn> Hệ thống bảng) nếu bạn đã có trong cơ sở dữ liệu của bạn và sau đó chạy lệnh dưới đây trong bảng điều khiển quản lý gói

PM> update-database 
0

Tôi đã gặp lỗi tương tự. Nguyên nhân là tôi đã tạo một bảng với lược đồ sai (nó phải là [dbo]). Tôi đã làm theo các bước sau:

  1. Anh đã đánh rơi tất cả các bảng mà không có tiền tố "dbo."

  2. tôi tạo ra và chạy truy vấn này:

CREATE TABLE dbo.Cars(IDCar int PRIMARY KEY NOT NULL,Name varchar(25) NOT NULL,  
CarDescription text NULL) 
GO 
1

Nếu bạn đang ở trong đó giai đoạn phát triển, nơi bạn có một phương pháp bên trong lớp ngữ cảnh của bạn mà tạo ra TestData cho bạn, không gọi nó là trong hàm khởi tạo của bạn, nó sẽ cố tạo các bản ghi kiểm tra đó trong khi bạn chưa có bảng. Chỉ cần chia sẻ sai lầm của tôi ...

0

Vấn đề tôi gặp phải là vì tôi đã tạo cơ sở dữ liệu trong LocalDb của mình.
Nếu đó là trường hợp sau đó bạn phải viết được như hình dưới đây:

"SELECT * FROM <DatabaseName>.[dbo].[Projects]" 

Replace with tên cơ sở dữ liệu của bạn.
Bạn cũng có thể thả các dự án "[]"

Các vấn đề liên quan