2017-08-29 15 views
15

Trong giao diện điều khiển ứng dụng sau đây (Net core 2.0), các scaffold-dbcontext tạo sau DbContextAddDbContext được gọi với cấu hình, nhưng kiểu ngữ cảnh 'MyContext' chỉ khai báo một hàm tạo parameterless?

public partial class MyContext : DbContext 
{ 
    public virtual DbSet<Tables> Tables { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer(Program.Conn); } 
    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) { .... } 
} 

Trong Main() (static void Main(string[] args)), đoạn code sau

var services = new ServiceCollection(); 
var conn = configuration.GetConnectionString("MySource"); 
services.AddDbContext<MyContext>(o => o.UseSqlServer(conn)); // Error 

đã chạy sau lỗi thời gian?

AddDbContext được gọi với cấu hình, nhưng loại ngữ cảnh 'MyContext' chỉ khai báo một hàm tạo tham số. Điều này có nghĩa rằng cấu hình truyền cho AddDbContext sẽ không bao giờ được sử dụng

Trả lời

23

Khi lỗi nói nó nếu bạn cấu hình của bạn MyContext qua AddDbContext thì bạn cần phải quá thêm một constructor mà nhận một tham số kiểu DbContextOptions<MyContext> vào lớp MyContext của bạn như dưới đây

public MyContext(DbContextOptions<MyContext> options) 
    : base(options) 
{ } 

Nếu bạn không làm điều đó, ASP.Net Core sẽ không thể chèn cấu hình bạn đặt với AddDbContext.

+2

Cảm ơn. Tôi nghĩ rằng mã scaffolded mặc định không nên thay đổi. Tuy nhiên, bây giờ tôi có một vấn đề khác - Tôi không thể nhận được chuỗi kết nối, tôi đã đăng câu hỏi ở đây, https://stackoverflow.com/questions/45948141/configuration-getconnectionstringmyconn-got-null-value. – ca9163d9

+0

Ngay bây giờ tôi không thể làm bài kiểm tra cuối cùng vì chuỗi kết nối rỗng, hãy để tôi cố gắng mã cứng chuỗi kết nối để kiểm tra .... Có, thay đổi hoạt động. Cảm ơn bạn. – ca9163d9

+0

Lưu ý: đây là một phần lớp, do đó bạn nên thêm hàm tạo vào tệp thứ hai nếu bạn đang tự động tạo ngữ cảnh của mình –

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