2017-11-07 1 views
-1

Ich weiß nicht, was ich falsch mache, versuchen sehr schwer, ein Datenbankprojekt einzurichten, und weiterhin Fehler im Zusammenhang mit der Verbindungszeichenfolge dbcontext erhalten.ConnectionStrings DbContext in EF Core

Ich habe eine applicationdbcontext, die gerade verbindet, ist zu LocalDB

das Problem meiner andere DbContext ist, die ist, wo meine Daten scheinen, sind am falschen Ort zu sein und ich bin nicht sicher, wie es zu beheben. Dieser Code ist in meinen Modellen Ordner

public DbSet<Customer> Customers { get; set; } 
public DbSet<Job> Jobs { get; set; } 
public DbSet<Order> Orders { get; set; } 
public DbSet<Staff> Staff { get; set; } 
public DbSet<RequestType> RequestType { get; set; } 
public DbSet<CustomerJob> CustomerJobs { get; set; } 

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
{ 
    optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=Customers;Trusted_Connection=True;"); 
} 

in startup.cs Ich habe diesen Code .. services.AddDbContext (Optionen => options.UseSqlServer (Configuration.GetConnectionString ("DefaultConnection"))); services.AddDbContext (Optionen => Optionen.UseSqlServer (Configuration.GetConnectionString ("ProdConnection")));

in meinem appsettings Config ich diesen Code haben ..

"ConnectionStrings": { 
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=BRSCRM;Trusted_Connection=True;MultipleActiveResultSets=true", 
    "ProdConnection": "Server=(localdb\\mssqllocaldb;Database=Customers;Trusted_Connection=True;MultipleActiveResults=true" 
}, 

noch, wenn ich mein Projekt betreibe ich eine Fehlermeldung erhalten, dass die Konfiguration nicht verwendet wird, zugeführt wird, wird, DI Umkehrung der Kontrolle in der Tat, es ist eine Tasche von Katzen und es brennt!

+0

Fehler ist wie folgt - AddDbContext wurde mit der Konfiguration aufgerufen, aber der Kontexttyp 'CustomerContext' deklariert nur einen parameterlosen Konstruktor. Dies bedeutet, dass die an AddDbContext übergebene Konfiguration niemals verwendet wird. Wenn die Konfiguration an AddDbContext übergeben wird, sollte 'CustomerContext' einen Konstruktor deklarieren, der ein DbContextOptions akzeptiert und an den Basiskonstruktor für DbContext übergeben muss, damit ich Overriding onConfiguring nicht mehr funktioniere, wie repariere ich es, bitte jemanden helfen . – webdev8183

+0

ugh anscheinend brauchte es die Zeichenfolge in der Datei startup.cs überhaupt nicht, es dauerte die Überschreibung von onconfiguring ganz gut, aber dann war es dumm und wollte die gleiche Verbindungszeichenfolge zweimal verwenden .. – webdev8183

Antwort

0

Sie sollten die optionsBuilder.UseSqlServer("... Linie in Ihrer OnConfiguring Methode entfernen.

Dann fügen Sie einen Konstruktor zu Ihrer DbContext-Klasse wie folgt;

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

Hinzufügen DbContext Klasse ..

public class CustomerContext : DbContext 
{ 
    public DbSet<Customer> Customers { get; set; } 
    public DbSet<Job> Jobs { get; set; } 
    public DbSet<Order> Orders { get; set; } 
    public DbSet<Staff> Staff { get; set; } 
    public DbSet<RequestType> RequestType { get; set; } 
    public DbSet<CustomerJob> CustomerJobs { get; set; } 
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=Customers;Trusted_Connection=True;"); 
    } 
    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     //modelBuilder.Entity<CustomerJob>() 
     // .HasKey(c => new { c.JobId, c.CustomerId }); 
     //code to require a staff member be assigned.. 

     // modelBuilder.Entity<Staff>().Property(s => s.Name).IsRequired(); 
     // modelBuilder.Entity<Customer>().Property(c => c.AssignedStaff).IsRequired(); 
    } 


} 


public class CustomerJob 
{ 
    public int CustomerJobId { get; set; } 
    public int CustomerId { get; set; } 
    public DateTime RequestDate { get; set; } 
    public int JobId { get; set; } 
    public Job Job { get; set; } 
} 

public class Job 
{ 
    public int JobId { get; set; } 
    public int CustomerId { get; set; } 

    public string BusinessName { get; set; } 
    public string Name { get; set; } 
    public string JobDescription { get; set; } 
    public string ServiceType { get; set; } 
    public string GoogleLink { get; set; } 
    public string PoisLink { get; set; } 
    public bool EquisRendered { get; set; } 
    public bool NadirsRemoved { get; set; } 
    public string FolderLink { get; set; } 
    public string ReviewPosted { get; set; } 
    public string Ingestion { get; set; } 
    public string Moderated { get; set; } 
    public bool Delivered { get; set; } 
    public string CustomerReview { get; set; } 
    public string PublishedLink { get; set; } 
    public DateTime RequestDate { get; set; } 
    public DateTime LastModifiedDate { get; set; } 
    public DateTime ScheduleShootDate { get; set; } 
    public DateTime CompletionDate { get; set; } 
    public List<CustomerJob> CustomerJobs { get; set; } 
    public Staff AssignedStaff { get; set; } 
} 

public class Staff 
{ 
    public int StaffId { get; set; } 
    public string Name { get; set; } 
    public string Phone { get; set; } 
    public string EMail { get; set; } 
} 

public class Order 
{ 
    public int OrderID { get; set; } 
    public int CustomerID { get; set; } 
    public int Order_Detail_Id { get; set; } 
    public List<Job> Job { get; set; } 
} 

public class RequestType 
{ 
    public int ID { get; set; } 
    public string Description { get; set; } 
} 

}

Startup.cs Klasse ..

public class Startup 
{ 
    public Startup(IConfiguration configuration) 
    { 
     Configuration = configuration; 
    } 

    public IConfiguration Configuration { get; } 

    // This method gets called by the runtime. Use this method to add services to the container. 
    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddDbContext<ApplicationDbContext>(options => 
      options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); 
     services.AddDbContext<CustomerContext>(); 

     services.AddIdentity<ApplicationUser, IdentityRole>() 
      .AddEntityFrameworkStores<ApplicationDbContext>() 
      .AddDefaultTokenProviders(); 

     // Add application services. 
     services.AddTransient<IEmailSender, EmailSender>(); 
     // Add Oauth Options 
     /* Third Party Login Authenticaton Options Google */ 
     services.AddAuthentication().AddGoogle(googleOptions => 
     { 
      googleOptions.ClientId = Configuration["Authentication:Google:ClientId"]; 
      googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"]; 
     }); 
     /* End Google Options */ 
     /* Begin Facebook Options */ 
     services.AddAuthentication().AddFacebook(facebookOptions => 
     { 
      facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"]; 
      facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"]; 
     }); 

     /* End Facebook Options */ 

     /* Begin Microsoft Options */ 
     services.AddAuthentication().AddMicrosoftAccount(microsoftOptions => 
     { 
      microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ApplicationId"]; 
      microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:Password"]; 
     }); 

     /* End Microsoft Options */ 

     /* Twitter Options */ 
     services.AddAuthentication().AddTwitter(twitterOptions => 
     { 
      twitterOptions.ConsumerKey = Configuration["Authentication:Twitter:ConsumerKey"]; 
      twitterOptions.ConsumerSecret = Configuration["Authentication:Twitter:ConsumerSecret"]; 
     }); 
     /* End Twitter Options */ 
     /* Begin Identity Options Configuration */ 
     services.AddMvc(); 
     services.AddAuthorization(options => 
     { 
      options.AddPolicy("RequireAdminRole", policy => policy.RequireRole("Admin")); 
     }); 
    } 

Sowieso seine Arbeit nun, mein Fehler war, dass ich das definiert hatte Verbindung in 2 separaten Orten und ich denke, das war eine Ausnahme.

+0

: Basis (Optionen) ist ein no op, es tut nichts, aber rufen Sie die Basisklasse, die keine Implementierung hat, die Verbindungszeichenfolge wurde benötigt, einfach nicht benötigt, es funktioniert jetzt aber danke für die Eingabe. – webdev8183

+0

Sie sagen verwenden services.AddDbContext (options => options.UseSqlServer (Configuration.GetConnectionString ("DefaultConnection")))); in deiner startup.cs. Dieser Verbindungszeichenfolgenoptions-Parameter muss in Ihrem db-Kontextkonstruktor akzeptiert werden. –

+0

nein Ich habe die Verbindung im Konstruktor in Startup cs ich habe es ohne Argumente übergeben und es hat funktioniert. – webdev8183

Verwandte Themen