5

Tôi đang sử dụng ASP.NET EF Core với MySQL (trình điều khiển Pomelo.EntityFrameworkCore.MySql). Gây ra một bối cảnh như vậy cần một số dòng cấu hình cụ thể mà DbContext mặc định với MSSQL không có, tôi đã tạo ra một MySqlContext:Loại trừ DbContext khỏi di chuyển để tránh Context-Parameter

public class MySqlContext : DbContext { 
    string connectionString; 
    // ... 
} 

Vì vậy, tất cả DbContexts tôi được thừa hưởng từ những lớp:

public class MyDbContext: MySqlContext { 
    public DbSet<MyModel> MyModels{ get; set; } 
    // ... 
} 

Trong dự án của tôi, tôi hiện đang có một ngữ cảnh (DbContext) có chứa DbSets. Và MySqlContext, không phải là một bối cảnh thực sự như thế này bởi vì nó không có DbSets và chỉ hoạt động như một trình bao bọc cho cấu hình MySQL để tôi có thể sử dụng lại chúng tốt hơn.

Nhưng có vẻ như sự di cư sẽ thấy chúng như hai hoàn cảnh khác nhau bởi vì khi tôi thêm một sự chuyển đổi cách sử dụng lệnh Add-Migration Test Tôi đã nhận lỗi

Hơn một DbContext đã được tìm thấy. Chỉ định cái nào cần sử dụng. Sử dụng tham số '-Context' cho lệnh PowerShell và tham số '--context' cho lệnh dotnet.

Vì vậy, mỗi lần di chuyển, tôi phải thêm -Context MyContext vào lệnh. Tôi muốn tránh điều này, bởi vì như tôi đã nói MySqlContext thứ hai không phải là một bối cảnh thực sự nắm giữ các mô hình và di chuyển. Có cách nào để nói với công cụ di chuyển này không? Tôi cần một cái gì đó giống như thuộc tính [NotMapped] cho các mô hình EF, nói với EF: Không lưu trữ thuộc tính này vào cơ sở dữ liệu. Như thế tôi cần nói với EF: Bỏ qua lớp MySqlContext vì chúng không cần di chuyển.

Trả lời

5

Make lớp cơ sở trừu tượng:

public abstract class MySqlContext : DbContext { 
    string connectionString; 
    // ... 
} 
+0

Thiệt hại, dễ dàng và hợp lý sau đó, cảm ơn! Ở đây chúng ta đang nói 'Đôi khi, bạn không thể thấy gỗ cho cây': D – Lion

2

Lệnh Use-DbContext MyContext sẽ thiết lập MyContext như bối cảnh mặc định để sử dụng cho phiên PowerShell của bạn. Đây là một cách khác để tránh phải chỉ định -Context mỗi lần.

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