2010-07-19 43 views
29

Tôi nghĩ rằng tôi muốn thử nghiệm một chút với Scott Guthrie's latest post trên dev-code đầu tiên với Entity Framework 4. Thay vì sử dụng Sql Server, tôi đang cố gắng sử dụng MySql. Dưới đây là các phần liên quan của web.config của tôi (đây là ứng dụng Asp.Net MVC 2):Sử dụng MySql với Entity Framework 4 và Code-First Development CTP

<connectionStrings> 
    <add name="NerdDinners" 
     connectionString="Server=localhost; Database=NerdDinners; Uid=root; Pwd=;" 
     providerName="MySql.Data.MySqlClient"/> 
    </connectionStrings> 
    <system.data> 
    <DbProviderFactories> 
     <add name="MySQL Data Provider" 
      invariant="MySql.Data.MySqlClient" 
      description=".Net Framework Data Provider for MySQL" 
      type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
    </system.data> 

Giống như hướng dẫn, tôi mong EF4 tự động tạo db cho tôi. Thay vào đó, nó ném ra một ProviderIncompatibleException, với một ngoại lệ bên trong phàn nàn rằng cơ sở dữ liệu NerdDinners không tồn tại.

Đủ công bằng; Tôi đã đi và tạo ra db MySql cho nó chỉ để xem nếu mọi thứ sẽ làm việc, và có một ProviderIncompatibleException thay thế. Lần này, "DatabaseExists không được nhà cung cấp hỗ trợ".

Tôi sẽ thừa nhận, đây là lần đầu tiên tôi thực sự delving vào Entity Framework (tôi đã mắc kẹt chủ yếu để LINQ để Sql), và điều này là tất cả chạy trên Code-First CTP phát hành chỉ tuần trước. Điều đó nói rằng, có cái gì tôi đang làm sai ở đây, hoặc một vấn đề được biết đến mà có thể được làm việc xung quanh?

+0

Bạn đúng, nhà cung cấp mysql không tồn tại (http://stackoverflow.com/questions/76488/using-mysql-with-entity-framework/848539#848539). Có thể các bit CTP có lỗi hoặc nhà cung cấp MySQL thiếu dấu chấm câu (hoặc cả hai). – marcind

+0

là bạn có thể sử dụng thành viên đơn giản trong MVC 4 với MySQL? –

Trả lời

25

Phải, cuối cùng cũng làm việc với một vài điểm đáng chú ý.

  • Không thể tạo một DB, phải tồn tại đã
  • Bạn cần phải tạo ra một chuỗi kết nối cho mỗi cuộc thi DB sử dụng tên DBContext (trong ví dụ trên một connectionstring phải tồn tại với cái tên "NerdDinners"), không chỉ là một mặc định (nếu không nó sẽ sử dụng SQL)
  • Nó sẽ sử dụng tên của tên DBSet bạn sử dụng để xác định ngữ cảnh của bạn làm tên bảng, vì vậy hãy cẩn thận khi đặt tên cho chúng.

Tất cả trong tất cả, một con đường dài nhưng có cuối cùng

** Update Một điểm cần lưu ý, khi triển khai trang web MVC của bạn sử dụng MySQL bạn sẽ giống như hầu hết nhu cầu cũng thêm một DataFactory để web của bạn .config. Thông thường vì sự khác biệt trong các kết nối MySql và các phiên bản của MySQL được hỗ trợ. (câu trả lời tìm thấy thông qua các nguồn khác sau nhiều đầu gãi) Chỉ cần thêm:

<system.data> 
    <DbProviderFactories> 
     <add name="MySQL Data Provider" 
      invariant="MySql.Data.MySqlClient" 
      description=".Net Framework Data Provider for MySQL" 
      type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
    </system.data> 

Là một phần riêng biệt để web.config của bạn đảm bảo để thiết lập số phiên bản của MySQL.Data.dll bạn triển khai với trang web (cũng là một ý tưởng hay để "sao chép dưới dạng địa phương" các tệp DLL MySQL của bạn để đảm bảo khả năng tương thích.)

+0

Đánh dấu bạn là câu trả lời, vì bạn đã tìm được cách :). Công việc tuyệt vời! – Dusda

+0

Bạn có phải tự mình tạo bảng hay tạo bảng cho bạn? – DennyFerra

+0

Khuôn khổ thực thể vẫn không thể tạo bảng không may, vì vậy bạn sẽ phải tự làm điều đó (cũng lưu ý trên một số tablenames và tên cột có phân biệt chữ hoa chữ thường). – Darkside

2

Một điểm quan tâm khác - Nếu bạn thêm mục nhập "Nhà cung cấp dữ liệu MySQL" vào máy tính cục bộ của mình (C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config trong trường hợp của tôi), bạn có thể kết nối với cá thể MySql của bạn thông qua Visual Studio ...

2

Câu hỏi này và câu trả lời là rất hữu ích cho tôi di chuyển một dự án EF lớn từ SQL để mySQL vì vậy tôi nghĩ tôi sẽ thêm ghi chú của tôi và hy vọng họ có ích:

Như đã đề cập tên của chuỗi kết nối có để khớp với tên của Lớp mở rộng System.Data.Entity.DbContext.

Dường như vẫn không có cách nào để tạo bảng trong EF bằng cách sử dụng trình kết nối mySQL nhưng bạn có thể sử dụng và sửa đổi các tập lệnh tạo SQL để tạo các bảng mySQL.Cách dễ nhất tôi tìm thấy để làm điều này là nhận xét trong và ngoài hàm OnModelCreating trên DbContext mở rộng tùy thuộc vào việc mã có cần thiết để tạo lại các bảng hay không. Nếu tôi thấy tôi đang làm điều này thường xuyên hơn tôi có kế hoạch để giải quyết điều này bằng cách sử dụng tiêm phụ thuộc và có các lớp riêng biệt dựa trên một cấu hình mySQL hoặc MSSQL.

Tôi thấy dễ dàng hơn để đảm bảo rằng hộp và máy chủ dev có trình kết nối mySQL chính xác .dll được đóng gói trong bản phát hành hơn là gây rối với DbFactoryProviders trong webconfig. Việc đóng gói chính xác trong gói xây dựng dự án/giải pháp có nghĩa là tôi chỉ cần các dòng chuỗi kết nối chứ không phải các dòng DbFactoryProviders mà tôi thấy khó làm việc một cách nhất quán trên một số máy.

Tôi cần thay đổi độ nhạy phân biệt chữ hoa chữ thường từ cài đặt tôi có từ 0 đến 1. Nếu không có cài đặt này, kết nối EF không thể tìm thấy các bảng ở đó do tên trường hợp của các đối tượng của tôi so với các bảng trường hợp cố định mà mySQL tạo ra.

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