2012-02-10 33 views
30

Tôi bắt đầu phát xung quanh với phương pháp tiếp cận mã đầu tiên cho khung thực thể, chủ yếu để tôi có thể trang trí các thuộc tính của tôi với chú thích hiển thị trong chế độ xem của tôi (nếu không, ngay bây giờ tôi phải tạo một lớp gần giống với một khung thực thể tạo ra cho tôi chỉ để tôi có thể thêm chú thích, và sau đó sao chép dữ liệu từ một đối tượng sang đối tượng kế tiếp).Dừng khung thực thể từ sửa đổi cơ sở dữ liệu

Ngay bây giờ có vẻ như khi tôi khởi động ứng dụng của mình, nó đang cố tạo cơ sở dữ liệu.

Tôi không muốn khung tổ chức để bao giờ sửa đổi cơ sở dữ liệu của tôi. Không. Không bao giờ. Thậm chí không thử nó. Nó thực sự không phải là khó để sửa đổi cơ sở dữ liệu; Tôi sẽ cảm thấy thoải mái hơn nhiều nếu tôi đã làm điều đó bản thân mình. Tôi không cần một khuôn khổ để nắm tay tôi khi thiết kế một cơ sở dữ liệu.

Tôi có thể yêu cầu khuôn khổ ngừng cố gắng sửa đổi cơ sở dữ liệu của mình không? Tôi rất do dự khi sử dụng mã đầu tiên vì thực tế là nó đang cố sửa đổi cơ sở dữ liệu của tôi khá đáng sợ. Ngay cả trong phát triển tôi cũng không bao giờ muốn thấy nó xảy ra.

Tôi có gặp may không?

+1

nó có vẻ giống như mô hình của bạn không chính xác phù hợp cơ sở dữ liệu của bạn.Bạn có thể thử sử dụng một bản sao của cơ sở dữ liệu của bạn và điểm EF tại đó. Hãy để nó tạo ra sửa đổi db và so sánh sự khác biệt, sau đó sửa đổi mô hình của bạn cho phù hợp. Bạn cũng nên xem xét lớp chung của EntityTypeConfiguration. –

+0

Sửa đổi giản đồ hoặc sửa đổi dữ liệu? – jrummell

+0

một số người trong chúng ta không tin tưởng những di chuyển tự động này và xuất phát từ quan điểm thiết kế và thiết lập cơ sở dữ liệu đủ quan trọng để hoàn toàn hợp lý để thực hiện thủ công. Nhưng lấy EDMX ra khỏi tôi ... Một lý do khác để làm điều này: vì vậy một nhóm có thể làm việc trên DB trong khi nhóm kia thiết lập các lớp/mô hình để phù hợp - gần như song song. Và nếu bất cứ điều gì thay đổi, bạn không phải tìm kiếm lại để di chuyển. Chỉ cần cập nhật chú thích của bạn, v.v. – mmcrae

Trả lời

46

Nếu bạn không muốn EF để tạo ra cơ sở dữ liệu, bạn có thể vô hiệu hóa các cơ sở dữ liệu khởi tạo:

public class SchoolDBContext: DbContext 
{ 
    public SchoolDBContext() : base("SchoolDBConnectionString") 
    {    
     //Disable initializer 
     Database.SetInitializer<SchoolDBContext>(null); 
    } 
    public DbSet<Student> Students { get; set; } 
    public DbSet<Standard> Standards { get; set; } 
} 

Xem http://www.entityframeworktutorial.net/code-first/turn-off-database-initialization-in-code-first.aspx

+1

Bạn có thể đặt nó trong hàm dựng tĩnh của lớp ngữ cảnh, như trong video ví dụ này: http://msdn.microsoft.com/en-us/data/jj572367 –

+1

nó không được hiển thị trong video. thay vào đó, hãy xem tại đây: http://www.entityframeworktutorial.net/code-first/turn-off-database-initialization-in-code-first.aspx quan trọng là không sử dụng điều này trước Cơ sở dữ liệu –

+1

Câu trả lời này có thể được cải thiện với nơi để thêm mã này. –

3

Nếu bạn muốn sử dụng EF nhưng không bao giờ sửa đổi cơ sở dữ liệu thì có thể bạn không muốn mã đầu tiên. Bạn có thể muốn một cái gì đó giống như cơ sở dữ liệu đầu tiên.

http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx

Liên kết từ ý kiến ​​trả lời:
http://automapper.codeplex.com/
Getting Started with AutoMapper

sửa: Tôi hiểu lầm mục tiêu, you should reference this answer where the following correct code was given:

If you don't want EF to create your database, you can disable the database initializer

Database.SetInitializer<MyContext>(null); 
+0

Tôi đồng ý rằng cơ sở dữ liệu * âm thanh * đầu tiên giống như những gì tôi muốn, nhưng tôi đang cố gắng giải quyết vấn đề phải tạo một lớp gần giống với mô hình được tạo cho tôi. Tôi phải tạo một lớp gần như giống hệt nhau để tôi có thể trang trí các thuộc tính với chú thích để hiển thị trong chế độ xem của tôi (ví dụ: thực thi xác thực). Kết quả là tôi phải lặp qua tất cả các đối tượng "EF" của tôi và sao chép/ánh xạ chúng vào đối tượng mới mang chú thích. –

+1

Tôi sẽ nói rằng bạn không bao giờ nên chuyển các đối tượng mô hình db của bạn đến các khung nhìn của bạn. Nói chung, bạn tạo một lớp khác sau đó được chuyển đến chế độ xem của bạn mà chỉ chứa các thuộc tính có sẵn cho chế độ xem đó. Sau đó bạn sẽ trang trí lớp đó với các thuộc tính xác nhận của bạn –

+0

@AnthonyShaw - Tôi chưa thấy nhiều ví dụ về những người làm điều đó, nhưng đó chính xác là những gì tôi đang làm ngay bây giờ. Tôi nghĩ rằng tôi cảm thấy sợ hãi về nó bởi vì nó có vẻ như rất nhiều công việc sao chép/lập bản đồ trần tục. Có một mẫu mà bạn sử dụng để biến đối tượng mô hình cơ sở dữ liệu của bạn thành một đối tượng để hiển thị trong chế độ xem của bạn không? Làm thế nào để bạn thường làm điều đó? –

2

Khi bạn khai báo bạn initialiser, sử dụng các lớp cơ sở:

public class DatabaseInitialiser : CreateDatabaseIfNotExists<MyContext> 

hơn:

public class DatabaseInitialiser : RecreateDatabaseIfModelChanges<MyContext> 

Hoặc nếu bạn sử dụng:

Database.SetInitializer<MyContext>(new RecreateDatabaseIfModelChanges<MyContext>); 

thay thế này với :

Database.SetInitializer<MyContext>(new CreateDatabaseIfNotExists<MyContext>); 
1

code first chính xác là những gì bạn mô tả, tôi không hiểu câu hỏi của bạn.

Nếu bạn không muốn EF fiddle với cơ sở dữ liệu của bạn, sau đó generate a model từ cơ sở dữ liệu hiện có của bạn.

+0

Phải, nhưng nếu tôi tạo mô hình từ cơ sở dữ liệu của mình, thì tôi thiếu chú thích dữ liệu mà tôi cần để hiển thị dữ liệu trong chế độ xem của mình. Nó dẫn đến rất nhiều công việc trùng lặp; về cơ bản tạo ra một lớp giống hệt như mô hình được tạo ra và sau đó trang trí các thuộc tính đó bằng các chú thích. Tôi đang cố tránh mọi nỗ lực sao chép liên quan đến điều đó. –

+0

Bạn có thể trang trí các lớp được tạo bằng cách tạo các lớp học một phần hoặc các lớp bạn thân (MetadataAttribute). – jrummell

+0

Có những ví dụ mà bạn muốn làm Mã Thứ hai, cơ sở dữ liệu tồn tại nhưng mối quan hệ không hoặc giao dịch của bạn với Chế độ xem và phương pháp tiếp cận Mã Thứ hai là bắt buộc. –

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