2012-02-13 39 views
30

Chúng tôi đang sử dụng phương pháp tiếp cận Cơ sở dữ liệu đầu tiên với EntityFramework. Chúng tôi đã có một số khách hàng và khi triển khai phiên bản sản phẩm mới, chúng tôi hiện đang áp dụng các thay đổi lược đồ DB "theo cách thủ công" với các công cụ như SQL Compare.Chuyển đổi EF cho phương pháp tiếp cận cơ sở dữ liệu đầu tiên?

Có cách nào để di chuyển EF có thể giúp tự động áp dụng thay đổi cho khách hàng DB không?

+0

tất nhiên, tôi không sẵn sàng để mất bất cứ điều gì, tính năng Code First Migration dường như bảo toàn dữ liệu, tôi muốn một cái gì đó tương tự cho DB đầu tiên. Tôi thực sự muốn điều này cho các tình huống đơn giản - các bảng mới được thêm vào, các trường mới, v.v. – Shaddix

+0

Nếu bạn muốn chức năng tương tự như EF Migration sử dụng cơ sở dữ liệu trước, hãy xem [FluentMigrator] (https://github.com/fluentmigrator/fluentmigrator) –

Trả lời

14

Theo như tôi biết, EF Migrations là sản phẩm được nhắm mục tiêu tại CodeFirst và không hỗ trợ các hoạt động của Cơ sở dữ liệu đầu tiên.

CodeFirst giả định rằng bạn sẽ không bao giờ thực hiện bất kỳ thay đổi nào theo cách thủ công cho cơ sở dữ liệu. Tất cả các thay đổi đối với cơ sở dữ liệu sẽ trải qua quá trình di chuyển đầu tiên của mã.

+3

Cảm ơn , có vẻ như các tập lệnh cập nhật là cách duy nhất để đi với EF hiện tại .. – Shaddix

+4

Một giải pháp thay thế tốt có thể là các dự án Cơ sở dữ liệu/SSDT và thực hiện so sánh lược đồ. –

2

Tôi nghĩ là có! Bạn cần phải tiếp tục theo cách của bạn thông qua các mã đầu tiên.

Để làm điều này, Giả sử rằng bạn có DbContext sau đó EF Db đầu tiên tạo ra cho bạn:

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("Name=DefaultConnection") 
    { 

    } 

    // DbSets ... 
} 

sự thay đổi đó như sau để bắt đầu sử dụng mã đầu tiên và tất cả các công cụ kỳ diệu của nó (di cư, vv .):

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("YourDbFileName") 
    { 

    } 

    // DbSets ... 
} 

Nó gây rằng EF tạo ra một chuỗi kết nối mới sử dụng SQL Express trên máy tính cục bộ của bạn trong tập tin web.config của bạn với tên YourDbFileName, một cái gì đó giống như đầu DefaultConnection Db đầu tiên tạo ra.

Tất cả các bạn có thể cần tiếp tục theo cách của bạn, là chỉnh sửa YourDbFileName ConStr theo máy chủ của bạn và các tùy chọn khác.

Thông tin thêm herehere.

0

Chỉ cần nhìn cho đối tượng trẻ em DbContext của bạn và tìm kiếm phương pháp này:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 

Nếu bạn nhận xét này:

throw new UnintentionalCodeFirstException(); 

thì ngoại lệ sẽ không được ném vào hoạt động di cư. Như bạn có thể hình dung, di chuyển tìm phần này để biết cấu hình cho từng thực thể với bảng hoặc bảng nào.

Xin lỗi nếu tôi không đi với nhiều chi tiết hơn, nếu bạn muốn nhiều hơn, tôi sẽ vui lòng chỉnh sửa và làm cho nó tốt hơn!

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