Với mục đích thử nghiệm, tôi muốn tự có thể thả và tạo lại một DB bằng EF CodeFirst CTP5. Làm thế nào tôi sẽ làm điều này?EF CodeFirst CTP5 - Thả thủ công và tạo DB?
Trả lời
Lớp DbDatabase là một thuộc tính trên đối tượng DbContext của bạn cung cấp một tập hợp các phương thức để làm việc trực tiếp với cơ sở dữ liệu. Bạn có thể sử dụng Tạo và Xóa phương pháp cho vấn đề này:
using (var context = new YourContext())
{
context.Database.Delete();
context.Database.Create();
// Or
context.Database.CreateIfNotExists();
}
Và đừng quên đóng mọi kết nối đến cơ sở dữ liệu của bạn (từ bên trong Visual Studio hay như vậy), nếu không bạn sẽ nhận được một ngoại lệ nói rằng cơ sở dữ liệu đang được sử dụng ... –
Gọi Database.Connection.Close() trước Database.Delete() không giúp được gì. Bạn vẫn nhận được thông báo rằng cơ sở dữ liệu đang được sử dụng. – Greg
Greg, đó là vì cơ sở dữ liệu thực sự đang được sử dụng. Bạn có thể mở nó trong Server Explorer - trước tiên hãy thử đóng kết nối đó. – mjohnsonengr
Tôi nhận ra điều này là ngày nhưng tôi không thể có được giải pháp chấp nhận làm việc vì vậy tôi lăn ra một giải pháp nhanh chóng ...
using System;
using System.Data.Entity;
namespace YourCompany.EntityFramework
{
public class DropDatabaseInitializer<T> : IDatabaseInitializer<T> where T : DbContext, new()
{
public DropDatabaseInitializer(Action<T> seed = null)
{
Seed = seed ?? delegate {};
}
public Action<T> Seed { get; set; }
public void InitializeDatabase(T context)
{
if (context.Database.Exists())
{
context.Database.ExecuteSqlCommand("ALTER DATABASE " + context.Database.Connection.Database + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
context.Database.ExecuteSqlCommand("USE master DROP DATABASE " + context.Database.Connection.Database);
}
context.Database.Create();
Seed(context);
}
}
}
Điều này phù hợp với tôi và hỗ trợ việc tạo hạt dễ dàng.
Điều này phù hợp với tôi nhưng không phải là câu trả lời dave với khung pháp nhân 5.0. Bạn sẽ phải kích hoạt một chuyến đi cơ sở dữ liệu giống như một truy vấn để kích hoạt hành động.
Global.asax
Database.SetInitializer<MedicalVarianceDataContext >(new DataInitializer());
Ở những nơi khác
public class DropDatabaseInitializer<T> : IDatabaseInitializer<T> where T : DbContext, new()
{
public DropDatabaseInitializer(Action<T> seed = null)
{
}
protected virtual void Seed(T context) { }
public void InitializeDatabase(T context)
{
if (context.Database.Exists())
{
context.Database.ExecuteSqlCommand("ALTER DATABASE " + context.Database.Connection.Database + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
context.Database.ExecuteSqlCommand("USE master DROP DATABASE " + context.Database.Connection.Database);
}
context.Database.Create();
Seed(context);
}
}
Tôi đoán bạn cũng sẽ cần phải thêm context.savechanges();
protected override void Seed(MedicalVarianceDataContext context)
{
new List<ViewLookUpIndividualUnit>{
new ViewLookUpIndividualUnit{ MvrsIndividualUnit="Clinic" ,Active=true}
}.ForEach(k => context.ViewLookUpIndividualUnits.Add(k));
base.Seed(context);
context.SaveChanges();
}
Tôi đã thêm một chỉnh sửa trên Dave nhưng không biết nếu nó sẽ diễn ra. Nên ở đây. – hidden
Hãy coi chừng nếu tên cơ sở dữ liệu của bạn chứa dấu gạch nối, bạn sẽ cần phải làm điều này: '[My-DatabaseName-with-hyphens]' trong phần 'ExecuteSqlCommand'. –
- 1. Tạo EF CodeFirst DbContext sử dụng Roslyn
- 2. Tạo trường loại tiền bằng mã EF đầu tiên CTP5
- 3. EF (Entity Framework) 4.3 Công cụ di chuyển không hoạt động trên EF 4.1 DB
- 4. Gọi theo cách thủ công DbMigration.Up trong EF
- 5. EF CodeFirst: Nhận tất cả các loại POCO cho DbContext
- 6. ef 5 codefirst enum collection không được tạo trong cơ sở dữ liệu
- 7. Làm thế nào để rake db: thả và rake db: tạo trên Heroku?
- 8. EF 4.2, CodeFirst - Thuộc tính điều hướng bên trong một loại phức tạp
- 9. Làm cách nào để lấy siêu dữ liệu dbsets từ EF CodeFirst DbContext?
- 10. Làm thế nào để cấu hình DbContext để làm việc với Oracle ODP.Net và EF CodeFirst?
- 11. Chạy rake db: thả db: tạo db: di chuyển trên Heroku Cedar chồng
- 12. Cách gọi hàm DB từ truy vấn LINQ EF?
- 13. Ưu điểm của CodeFirst so với Cơ sở dữ liệu đầu tiên là gì?
- 14. Mẹo và thủ thuật đào tạo Qt
- 15. Làm cách nào để kiểm tra mã giao dịch DB thủ công ở Django?
- 16. WIF tạo liên kết theo cách thủ công
- 17. EF CodeFirst: Hoặc tham số @objname là mơ hồ hoặc @objtype được xác nhận quyền sở hữu (COLUMN) là sai
- 18. iPhone Dev - Tạo UIButton theo cách thủ công
- 19. Tôi làm cách nào để tạo khác biệt thủ công?
- 20. Tạo thủ công phân cấp diễn viên trong akka
- 21. Tạo bối cảnh khuôn mặt theo cách thủ công
- 22. Cách tạo người dùng theo cách thủ công với Devise
- 23. EF CTP5 - Tải Eager được đánh máy mạnh - Cách bao gồm các thuộc tính điều hướng lồng nhau?
- 24. Hộp danh sách thả xuống gwt có thể có các giá trị theo cách thủ công?
- 25. Làm cách nào để tạo TypeTag theo cách thủ công?
- 26. Cắt xén hoặc thả và tạo bảng
- 27. Tắt Object Caching trong Entity Framework CTP5
- 28. Thả TẤT CẢ các trình kích hoạt từ Postgres DB?
- 29. Không thể thả cơ sở dữ liệu vì nó hiện đang sử dụng - EF mã đầu tiên
- 30. AngularJS Thủ công làm cho bộ điều khiển và mẫu
bạn có thể sử dụng Database.SetInitializer, đọc trong các ý kiến ở đây http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an -existing-database.aspx –
Bạn sẽ thường xuyên nhận được ngoại lệ sau đây mặc dù: Không thể thả cơ sở dữ liệu "..." vì nó hiện đang được sử dụng. Chỉ cần khởi động lại VisualStudio và bạn tốt. Tính năng CodeFirst này vẫn còn khá không ổn định. – RedGlyph