Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Kết nối cơ sở dữ liệu MySQL động cho Entity Framework 6

Entity Framework 6 cung cấp một số thay đổi tinh tế tiện dụng hỗ trợ cả việc MySQL hoạt động và cũng tạo ra các kết nối cơ sở dữ liệu động.

Làm cho MySQL hoạt động với Entity Framework 6

Đầu tiên, vào ngày tôi trả lời câu hỏi này, trình điều khiển trình kết nối .Net duy nhất tương thích với EF6 là MySQL .Net Connectior 6.8.1 (Phiên bản phát triển beta) có thể được tìm thấy tại trang web MySQL chính thức tại đây .

Sau khi cài đặt, hãy tham khảo các tệp sau từ giải pháp Visual Studio của bạn:

  • Mysql.Data.dll
  • Mysql.Data.Entity.EF6.dll

Bạn cũng sẽ cần sao chép các tệp này vào nơi nào đó mà chúng có thể truy cập được vào dự án trong thời gian xây dựng, chẳng hạn như thư mục bin.

Tiếp theo, bạn cần thêm một số mục vào tệp Web.config (hoặc App.config nếu trên máy tính để bàn).

Một chuỗi kết nối:

<connectionStrings>
    <add name="mysqlCon"
         connectionString="Server=localhost;Database=dbName;Uid=username;Pwd=password" 
         providerName="MySql.Data.MySqlClient" />
</connectionStrings>

Đồng thời thêm nhà cung cấp, bên trong <entityFramework /><providers /> , tùy chọn (đây là điều tuyệt đối phải có trong phần thứ hai của câu trả lời của tôi, khi xử lý cơ sở dữ liệu được xác định động), bạn có thể thay đổi <defaultConnectionFactory /> nút:

<entityFramework>
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
    <providers>
        <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
    </providers>
</entityFramework>

Nếu bạn thay đổi defaultConnectionFactory từ kết nối máy chủ sql mặc định, đừng quên xóa <parameter> các nút được lồng trong nút defaultConnectionFactory. MysqlConnectionFactory không nhận bất kỳ tham số nào cho phương thức khởi tạo của nó và sẽ không thành công nếu các tham số vẫn còn ở đó.

Ở giai đoạn này, việc kết nối với MySQL với Entity khá dễ dàng, bạn có thể tham khảo tên của connectionString ở trên. Lưu ý rằng nếu kết nối bằng tên, điều này sẽ hoạt động ngay cả khi defaultConnectionFactory nút vẫn trỏ đến SQL Server (theo mặc định).

public class ApplicationDbContext: DbContext
{
    public ApplicationDbContext() : base("mysqlCon")
    {
    }
}

Vấn đề chỉ là kết nối bình thường:

ApplicationDbContext db = ApplicationDbContext();

Kết nối với tên cơ sở dữ liệu được chọn động

Tại thời điểm này, thật dễ dàng để kết nối với cơ sở dữ liệu mà chúng ta có thể truyền dưới dạng tham số, nhưng có một số điều chúng ta cần làm.

Lưu ý quan trọng

Nếu bạn chưa có, bạn PHẢI thay đổi defaultConnectionFactory trong Web.config nếu bạn muốn kết nối với MySQLdynamnam. Vì chúng tôi sẽ truyền trực tiếp một chuỗi kết nối đến phương thức khởi tạo ngữ cảnh, nó sẽ không biết nhà cung cấp nào sẽ sử dụng và sẽ chuyển về nhà máy sản xuất kết nối mặc định của nó trừ khi được chỉ định trongweb.config. Xem ở trên để biết cách thực hiện điều đó.

Bạn có thể chuyển một chuỗi kết nối theo cách thủ công vào ngữ cảnh như sau:

public ApplicationDbContext() : base("Server:localhost;...")
{
}

Nhưng để làm cho nó dễ dàng hơn một chút, chúng ta có thể thực hiện một thay đổi nhỏ đối với chuỗi kết nối mà chúng ta đã thực hiện ở trên khi thiết lập mySQL. Chỉ cần thêm một trình giữ chỗ như được hiển thị bên dưới:

<add name="mysqlCon" connectionString="Server=localhost;Database={0};Uid=username;Pwd=password" providerName="MySql.Data.MySqlClient" />

Bây giờ chúng ta có thể xây dựng một phương thức trợ giúp và thay đổi lớp ApplicationDbContext như hình dưới đây:

public class ApplicationDbContext: DbContext
{
    public ApplicationDbContext(string dbName) : base(GetConnectionString(dbName))
    {
    }

    public static string GetConnectionString(string dbName)
    {
        // Server=localhost;Database={0};Uid=username;Pwd=password
        var connString = 
            ConfigurationManager.ConnectionStrings["mysqlCon"].ConnectionString.ToString();

        return String.Format(connString, dbName);
    }
}

Nếu bạn đang sử dụng di chuyển cơ sở dữ liệu, bước sau là quan trọng

Nếu bạn đang sử dụng chuyển đổi, bạn sẽ thấy rằng ApplicationDbContext sẽ được khung làm việc chuyển đến phương thức Seed của bạn và nó sẽ không thành công vì nó sẽ không được chuyển vào tham số mà chúng tôi đã đặt cho tên cơ sở dữ liệu.

Thêm lớp sau vào cuối lớp ngữ cảnh của bạn (hoặc bất cứ nơi nào thực sự) để giải quyết vấn đề đó.

public class MigrationsContextFactory : IDbContextFactory<ApplicationDbContext>
{
    public ApplicationDbContext Create()
    {
        return new ApplicationDbContext("developmentdb");
    }
}

Các phương thức di chuyển đầu tiên bằng mã và phương thức khởi đầu của bạn bây giờ sẽ nhắm mục tiêu đến developmentdb lược đồ trong cơ sở dữ liệu MySQL của bạn.

Hy vọng điều này sẽ giúp ai đó :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:chọn các hàng trong đó một cột rỗng

  2. Lưu trữ JSON trong cơ sở dữ liệu so với việc có một cột mới cho mỗi khóa

  3. Tại sao điều kiện IN lại chậm hơn =trong sql?

  4. Ví dụ về MySQL REGEXP

  5. Hiệu suất MySQL - 5 tham số từ tệp cấu hình