19

Tôi đã tạo mô hình Khung thực thể dựa trên cơ sở dữ liệu hiện có, sau đó tạo các thực thể POCO từ mô hình. Chuỗi kết nối trong web.config của tôi không phải là Entity Framework, nó chỉ là chuỗi kết nối tiêu chuẩn (nó thiếu các tham chiếu CSDL, SSDL, MSL).Mã Đầu tiên so với Cơ sở dữ liệu Đầu tiên

tôi có thể biên dịch ứng dụng của tôi, nhưng khi tôi chạy tôi nhận được lỗi này:

Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception


Câu hỏi của tôi là, nơi trong mã của tôi nó nhận ra POCOs đến từ thế hệ tự động, và làm thế nào có thể Tôi làm cho nó hoạt động như Code First? Tôi không muốn tham khảo CSDL vv trong chuỗi kết nối của tôi.

+0

thật tệ khi bạn cần phải sử dụng cả kiểu đầu tiên và mã đầu tiên ... – Serdar

+1

@Serdar - Không nhất thiết. Anh ta có thể muốn bắt đầu tạo ra mã từ một mô hình đã biết, nhưng sau đó từ điểm đó trở đi bắt đầu sử dụng mã đầu tiên để viết mã mới. –

+0

Tôi vừa nhận được :) xin lỗi ... – Serdar

Trả lời

23

Nếu chuỗi kết nối có siêu dữ liệu, EF cho rằng đó là Mô hình đầu tiên hoặc Cơ sở dữ liệu trước tiên. Nếu nó là một chuỗi kết nối đơn giản, EF nghĩ rằng đó là Mã đầu tiên. Tuy nhiên, nếu bạn muốn bắt đầu làm mô hình đầu tiên nhưng làm cho EF nghĩ rằng bạn đang thực sự làm mã đầu tiên (đó là những gì bạn đang làm), hãy đảm bảo bạn đang sử dụng trình tạo mã DbContext chứ không phải là trình tạo mặc định. Các mã POCO đầu tiên thực sự là - "các đối tượng C# thuần cũ" - không có cơ sở dữ liệu đặc biệt nào biết hoặc thay đổi các công cụ theo dõi trong chúng. Để sử dụng trình tạo mã DbContext, nhấp chuột phải vào sơ đồ mô hình của bạn và chọn "Thêm mục tạo mã mới ..." rồi chọn Trình tạo DbContext ADO.NET. Ngoài ra, tùy thuộc vào cách bạn đặt tên khóa chính và khóa ngoài và/hoặc chúng phức tạp hơn chỉ là các ID int đơn giản, có thể bạn sẽ cần điền một số mã để ánh xạ các mối quan hệ giữa các đối tượng của bạn trong phương thức "OnModelCreating" bối cảnh. Xóa dòng throw new UnintendedCodeFirstException(); và thay thế bằng mã ánh xạ của bạn. Nếu không, EF có thể không tìm ra được tất cả các mối quan hệ (nhớ không có siêu dữ liệu để nó dựa vào).

Hy vọng điều này sẽ hữu ích.

+0

Câu trả lời của bạn đã giúp tôi. Và tôi đặt tham chiếu của bạn vào câu hỏi/trả lời của tôi @ http://stackoverflow.com/questions/18674079/ef-5-0-database-first-model-not-working-on-one-table/18675388#18675388 Cảm ơn bạn – HGMamaci

+0

@HGM Rất vui khi bạn thấy câu trả lời này hữu ích. –

12

Bạn cần những điều sau đây trong tập tin cấu hình của bạn:

<connectionStrings> 
<add name="<The name of your class>" 
    connectionString="metadata=res://*/<test>.csdl|res://*/<test>.ssdl|res://*/<test>.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=<your source>;initial catalog=<your db>;persist security info=True;user id=<your user id>;password=<your password>;multipleactiveresultsets=True;App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 
</connectionStrings> 
+0

Xin chào John, Cảm ơn rất nhiều. Câu trả lời của bạn làm việc tốt cho tôi. –

+0

nếu bạn đang chuyển đổi connectionString của bạn từ một nguồn dữ liệu (localdb) đến một nguồn dữ liệu SQL sử dụng giải pháp này. tức là nếu bạn đang cung cấp một tên máy chủ thực sự cho nguồn dữ liệu của bạn thì giải pháp này là cách để đi. –

0

Tôi đang sử dụng cơ sở dữ liệu đầu tiên và giải quyết điều này bằng cách sao chép các EDMX tạo ra chuỗi kết nối đến app.config của ứng dụng khởi động của tôi. Một đã tồn tại nhưng dường như chúng khác nhau

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