5

Đội ngũ, tôi có một ứng dụng ASP.NET MVC mà tôi đang triển khai. Khi tôi triển khai nó, ứng dụng hoạt động tốt, nhưng khi tôi gọi Membership.CreateUser nó kết thúc bằng việc cố tạo cơ sở dữ liệu mặc dù nó đã tồn tại. Tôi cần phải làm gì để có được nó để nó không cố gắng gọi CreateMembershipEntities vì cơ sở dữ liệu đã tồn tại?Dừng khởi tạo cơ sở dữ liệu EF cho DefaultMembershipProvider

Tôi đã thử Database.SetInitializer cho trình khởi tạo không thực hiện điều gì, tôi đã thử xóa defaultConnectionFactory trong Web.config - Tôi hiện không còn tùy chọn.

Tôi mong được sự giúp đỡ của bạn!

CẬP NHẬT

Tôi vừa phát hiện ra ngày hôm qua rằng lý do nó đang cố gắng để tạo ra cơ sở dữ liệu là do các máy chủ host không cho phép kết nối để truy vấn sysdatabases và do đó cơ sở dữ liệu bao giờ tồn tại và là vì thế luôn cố gắng tạo ra nó. Có vẻ như tôi có thể phải quay trở lại với nhà cung cấp thành viên cũ của AspNet và cũng đi xa khỏi mô hình đầu tiên của mã EF.

<rant> Trên một lưu ý cá nhân hơn, tôi muốn cho Microsoft biết, cảm ơn vì không có gì! Mô hình đầu tiên của mã này hoạt động tốt với các ứng dụng được triển khai trên các máy chủ mà bạn sở hữu - nhưng đặt chúng trong đám mây (đó là tất cả mọi thứ đang diễn ra) và bạn không may mắn. Công việc tuyệt vời của Microsoft! Tại sao không chỉ thử và thực sự kết nối với cơ sở dữ liệu để xem nó có tồn tại không?!? Nếu kết nối thành công nó phải tồn tại - nếu không thì tôi đoán là không. </rant>

+0

"* Tôi đã thử Database.SetInitializer thành trình khởi tạo không có gì *": Cách bình thường để tắt khởi tạo DB là đặt trình khởi tạo thành 'null', tức là' Database.SetInitializer (null) '. Nhưng tôi không có ý tưởng những gì công cụ này EF đã làm với ASP.NET MembershipProvider sử dụng thủ tục lưu trữ và nó kết nối riêng (trừ khi bạn đã tùy chỉnh các nhà cung cấp bằng cách nào đó). Tôi sẽ ngạc nhiên nếu thiết lập initializer để 'null' giải quyết vấn đề. – Slauma

+0

@Slauma Vấn đề tôi gặp phải là nó đang cố tạo bảng thành viên khi chúng đã tồn tại trên cơ sở dữ liệu sản xuất. Tôi không có DROP và CREATE truy cập cơ sở dữ liệu trên máy chủ sản xuất. Một điều đáng chú ý ở đây là máy chủ sản xuất là GoDaddy và nhà cung cấp thành viên mà tôi đang sử dụng là DefaultMembershipProvider mà nó cấu hình trong một ứng dụng ASP.NET MVC 4 mới. Nó hoạt động rất tốt trên hộp phát triển của tôi. –

Trả lời

1

cung cấp cho một cái nhìn ở đây: http://www.qualitydata.com/learn/web-config-membership-provider-settings Nó cho thấy phần cấu hình thành viên của web.config. Bạn phải viết một phần tương tự và đặt connectionStringName = "Chuỗi kết nối của bạn". Trong chuỗi kết nối của bạn, bạn chỉ định thông tin về cơ sở dữ liệu đã tồn tại.

+0

Cảm ơn bạn đã trả lời. Hãy để tôi hỏi bạn một câu hỏi nhanh. Gần đây tôi đã phát hiện ra - giống như buổi chiều ngày hôm qua - rằng lý do tôi gặp rất nhiều rắc rối là do máy chủ lưu trữ không cho phép chuỗi kết nối truy vấn 'sysdatabases'. Và kể từ khi tôi đang sử dụng mã EF đầu tiên tiếp cận các nhà cung cấp thành viên mặc định cố gắng để xác nhận sự tồn tại của cơ sở dữ liệu. Tôi có nên quay lại nhà cung cấp thành viên cũ của AspNet không? Nó không sạch sẽ. –

+0

Câu trả lời cho vấn đề là sử dụng SqlMembershipProvider thay vì DefaultMembershipProvider. SqlMembershipProvider phù hợp với các giao diện của nhà cung cấp thành viên nhưng hoạt động giống như nó được sử dụng - nó không cố tạo một cơ sở dữ liệu nếu không tồn tại. Lời khuyên của tôi dành cho mọi người là KHÔNG sử dụng công cụ đầu tiên của mã EF. –

+0

Các liên kết trong câu trả lời này là lỗi thời ... mà không có nó tôi không nghĩ rằng có bất kỳ thông tin hữu ích trong câu trả lời? – ChrisW

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