Tôi nhận được lỗi này khi tôi cố gắng sử dụng mã di cư đầu tiên.Bắt 'Bối cảnh không phải là cấu trúc. Thêm một constructor mặc định hoặc cung cấp một thực hiện IDbContextFactory."
bối cảnh của tôi có một nhà xây dựng với tên kết nối.
public class VeraContext : DbContext, IDbContext
{
public VeraContext(string NameOrConnectionStringName = "VeraDB")
: base(NameOrConnectionStringName)
{
}
public IDbSet<User> Users { get; set; }
public IDbSet<Product> Products { get; set; }
public IDbSet<IntCat> IntCats { get; set; }
}
này tên kết nối được tiêm với Ninject khi dự án chạy, tôi cũng đã xác định nó như là một mặc định như trong đoạn code trên nhưng điều này đã không giúp đỡ.
kernel.Bind<IDbContext>()
.To<VeraContext>()
.WithConstructorArgument("NameOrConnectionStringName", "VeraDB");
khi tôi cố gắng thêm di cư với "Enable-Mi grations" là ném lên các lỗi:
The target context 'VeraData.EF.Infrastructure.VeraContext' is not constructible. Add a default constructor or provide an implementation of IDbContextFactory.
Nếu tôi loại bỏ các nhà xây dựng từ VeraContext
nó sẽ làm việc nhưng tạo ra một cơ sở dữ liệu với VeraData.EF.Infrastructure.VeraContext
như tên của nó.
Tôi giả định rằng ninject
chỉ chuyển chuỗi kết nối khi dự án chạy và không khi tôi sử dụng mã di chuyển đầu tiên. Dù sao tôi có thể tiêm/cung cấp một mặc định cho tên kết nối khi sử dụng mã di cư đầu tiên?
Tất cả công cụ thứ chín xảy ra khi ai đó ở đâu đó đang thực hiện 'Kernel.Get'.Bạn cần phải thêm một ctor mặc định hoặc chờ ai đó nói cho bạn biết cách móc công cụ di chuyển để xây dựng các đối tượng thông qua Ninject (mà tôi đoán là những gì bạn đang làm!). –
Bạn sẽ phải triển khai 'IDbContextFactory' để các kết quả nhất quán (hoặc việc di chuyển từ mã của bạn sẽ không hoạt động, v.v.). Về cơ bản bạn cần một ctor mặc định (đó là lỗi) - nhưng chỉ thực hiện nó sẽ dẫn đến các vấn đề. – NSGaga
'IDbContextFactory' không tốt cho việc tiêm, nó sẽ không hoạt động theo thiết kế. Không thể nhìn thấy điểm của nó ... – nicodemus13