2012-03-07 27 views
8

Tôi có một ứng dụng asp.net mvc4 nhỏ (làm việc tốt trong máy cục bộ của tôi), sử dụng khung thực thể v4.1.0.0 với ADO.net DbContext máy phát điện. (SQL server 2008 r2)Entity Framework đang cố gắng tạo một cơ sở dữ liệu, nhưng không phải những gì tôi muốn

tôi thêm các phiên bản mới hơn của dlls cần thông qua "Add Deployable Dependencies ..." menu ngữ cảnh trong Visual Studio 2010.

tôi có một lưu trữ chia sẻ với godaddy.com , Tôi đã tải các tệp lên máy chủ và tạo cơ sở dữ liệu, giờ đây vấn đề xảy ra. Khi tôi cố gắng duyệt trang web của mình, tôi nhận được lỗi sau:

TẠO cấp phép DATABASE bị từ chối trong cơ sở dữ liệu 'chính'.

Tôi đã xem xét điều này và phát hiện ra rằng lỗi này do mã EF đầu tiên cố gắng tạo cơ sở dữ liệu. nhưng tôi không muốn mã EF đầu tiên tạo lại cơ sở dữ liệu, làm cách nào để tắt hoàn toàn việc tạo cơ sở dữ liệu tự động này? Tôi không có ý định sử dụng tính năng mã đầu tiên.

Vui lòng trợ giúp.

Trả lời

23

đặt mã này vào phương pháp Application_Start() của Global.asax hoặc constructor trên lớp DbContext bạn

Database.SetInitializer<MyContext>(null); 

Nếu bạn muốn tạo cơ sở dữ liệu khi POCO lĩnh vực đang thay đổi, sử dụng mã sau đây thay vì ở trên

Database.SetInitializer<MyContext>(new DropCreateDatabaseIfModelChanges<MyContext>()); 
+0

Tôi đã thử đưa 'Database.SetInitializer (null); 'trong cả global.asax và các nhà xây dựng, nó isnt làm việc, sáng tôi thiếu cái gì? – nthapa13

+0

Kiểm tra chuỗi kết nối trong ứng dụng web của bạn. Tôi nghi ngờ rằng cơ sở dữ liệu EF cố tạo ra khác với cơ sở dữ liệu bạn đã tạo. – Ray

+0

Những gì tôi đã không đề cập đến trong câu hỏi là tôi cũng đã theo [bài đăng này của Hanselman] (http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx) về các nhà cung cấp phổ dụng, như tôi đã phát hiện sau khi kiểm tra chặt chẽ ngăn xếp theo dõi, cũng đã cố tạo cơ sở dữ liệu cho thành viên và hồ sơ aspnet. Vì vậy, sau đó tôi trở lại trở lại thành viên aspnet cũ và thiết lập nhà cung cấp trong web.config bây giờ, và bây giờ nó hoạt động, cảm ơn bạn đã nỗ lực @Ray – nthapa13

2

Nếu bạn đang sử dụng EF Migrations, đây là những gì bạn đã đặt cho nó:

public sealed class DbConfiguration : DbMigrationsConfiguration<DatabaseContext> 
{ 
    public DbConfiguration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 
} 

Nhưng điều này không trả lời câu hỏi về Mã EF Đầu tiên. Nếu cơ sở dữ liệu đã tồn tại, thì EF sẽ không cố gắng tạo ra nó. Vì vậy, bạn chỉ cần trỏ nó đến một cơ sở dữ liệu hiện có. Và để đảm bảo tên chuỗi kết nối giống với tên của ngữ cảnh cơ sở dữ liệu. Nếu nó không phải là, bạn cần phải cung cấp cho nó để nó với một số ghi đè:

public class DatabaseContext : DbContext 
{ 
    public DatabaseContext() 
     : base(ApplicationParameters.ConnectionStringName) 
    { 
    } 

    public DatabaseContext(string connectionStringName) 
     : base(connectionStringName) 
    { 
    } 

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