Tôi đang gặp sự cố khi thêm di chuyển ban đầu vào bối cảnh cơ sở dữ liệu Khung thực thể của tôi bên trong thư viện lớp .NET Core..NET Entity Framework - Thêm di chuyển cho Ngữ cảnh trong thư viện lớp
Khi tôi chạy:
dotnet ef migrations add migrationName -c PlaceholderContext
tôi nhận được lỗi:
Could not invoke this command on the startup project 'Placeholder.Data'. This version of the Entity Framework Core .NET Command Line Tools does not support commands on class library projects in ASP.NET Core and .NET Core applications. See http://go.microsoft.com/fwlink/?LinkId=798221 for details and workarounds.
Vì vậy, tôi nhấp vào link và biết rằng nó không thể thêm một chuyển đổi sang một thư viện lớp. Tuy nhiên bạn có thể chuyển đổi dự án thư viện lớp thành một dự án "ứng dụng" nhưng bằng cách làm như vậy tôi không thể tham chiếu dự án "ứng dụng" này từ lớp nghiệp vụ của tôi (thư viện lớp).
cấu trúc dự án:
Placeholder.Web (WebAPI) =>Placeholder.Business (lớp thư viện) =>Placeholder.Data (lớp thư viện)
Placeholder.Web => Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
//HERE WE REGISTER DB CONTEXT, (STATIC CLASS IN BUSINESS LAYER)
services.InjectBusinessContext(@"Data Source=(localdb)\ProjectsV13;Initial Catalog=Placeholder;Integrated Security=True;Connect Timeout=30;");
services.InjectWebServices();
services.InjectBusinessServices();
}
Làm cách nào để khắc phục sự cố thực sự gây phiền toái này?
Cập nhật (1)
tôi đã chuyển đổi thư viện lớp Placeholder.Data tôi đến một "ứng dụng" với một phương pháp chính tĩnh. Bởi vì tôi không còn có thể tham khảo Placeholder.Data từ Placeholder.Business Tôi phải đi với workaround 2 được liệt kê trên trang tài liệu microsoft. Khi tôi bây giờ chạy kịch bản di dân tôi nhận được như sau:
No database provider has been configured for this DbContext. A provider can be configured by overriding the DbContext.OnConfiguring method or by using AddDbContext on the application service provider. If AddDbContext is used, then also ensure that your DbContext type accepts a DbContextOptions object in its constructor and passes it to the base constructor for DbContext
Doh ofcourse wont work này, dbcontext được đăng ký từ ứng dụng Placeholder.Web của tôi, (thông qua lớp kinh doanh). Sau đó, tùy chọn duy nhất của tôi là thêm ngữ cảnh mới vào phương thức tĩnh mới và tôi thực sự không muốn thực hiện điều này.
Tôi sẽ thử sau này khi tôi về nhà! – Reft
vui lòng đánh dấu là câu trả lời nếu nó phù hợp với bạn. nếu bạn muốn tiến thêm một bước nữa, bạn cũng có thể mở rộng IServiceCollection trong dự án thư viện lớp DATA và thêm DI và các chuỗi kết nối vào đó để dự án Web của bạn hoàn toàn độc lập với dự án DATA. – Reza
Xin lỗi vì đã trả lời muộn, chỉ cần thử mã của bạn và nó hoạt động, cổ vũ. Nhưng! Nếu bạn nhìn vào cấu trúc dự án của tôi, tôi có một thư mục tự tạo tên là migrations. Khi tôi chạy lệnh, tôi nhận được một thư mục di chuyển mới trong thư mục gốc của tôi? 1. Tôi có thể thay đổi điều này không? 2. Nếu tôi muốn thêm nhiều lần di chuyển sau lần di chuyển đầu tiên đầu tiên, tôi có cần thực hiện lại các bước này hoặc có thể tạo nó theo cách thông thường với bảng điều khiển quản lý gói không? – Reft