2016-10-26 4 views
1

Ich muss einige Funktionen in der Repository-Klasse in die .net-Core-Bibliothek einfügen. Aber ich bekomme einen Fehler, dass mein Konstruktor keinen Konstruktor hat. Was mache ich falsch? Hier ist mein DbContext CodeZugriff auf das Repository aus der .NET-Core-Bibliothek

public class effMercContext : DbContext 
{ 
    public DbSet<Department> Departments { get; set; } 
    public DbSet<Employee> Employees { get; set; } 
    public DbSet<Project> Projects { get; set; } 
    public effMercContext(DbContextOptions<effMercContext> options) 
     : base(options) 
    { 
    } 
} 
    public class EffMercDbContextFactory : IDbContextFactory<effMercContext> 
{ 
    public effMercContext Create(DbContextFactoryOptions options) 
    { 
     var builder = new DbContextOptionsBuilder<effMercContext>(); 
     builder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=pinchdb;Trusted_Connection=True;MultipleActiveResultSets=true"); 
     return new effMercContext(builder.Options); 
    } 
} 

Mein Repository-Klasse bisher

public class EmployeeRepository 
{ 
    public Employee GetByID(int id) 
    { 
     using (effMercContext db = new effMercContext()) 
     { 

     } 
    } 
} 
+1

Natürlich folgen Wenn Sie eine Klasse definieren, die nur instanziiert werden kann, indem Sie ein bestimmtes Argument an ihren Konstruktor übergeben und dann versuchen, sie zu instanziieren, ohne Argumente an den Konstruktor zu übergeben, wird das nicht funktionieren. Welcher Teil ist nicht offensichtlich, die Tatsache, dass der Konstruktor Ihrer Klasse ein Argument benötigt, dass Sie kein Argument an Ihren Konstruktor übergeben, oder der daraus resultierende Fehler? Wenn man erklärt, welcher Teil unklar ist, können sich die Antworten auf diesen Teil konzentrieren. – hvd

+0

Ich bin nicht klar, wie ich mein Repository implementieren soll. Ich möchte so etwas machen [link] (https://docs.asp.net/en/latest/fundamentals/dependency-injection.html#using-framework-provided-services), aber in .net Kernbibliothek, und nicht in der Schnittstelle, aber in der Klasse –

+0

@ ВасяПупкин Aber Ihre Frage behandelt dieses Thema nicht. Es ist ein Fehler in Ihrem 'DbContext'. Bitte stellen Sie eine neue Frage zu diesem Thema – rbr94

Antwort

0

Sie Ihre EmployeeRepository wie folgt ändern können ...

public class EmployeeRepository 
{ 
    var optionsBuilder = new DbContextOptionsBuilder<effMercContext>(); 
    // add necessary options 
    public Employee GetByID(int id) 
    { 
     using (effMercContext db = new effMercContext(optionsBuilder.Options)) 
     { 

     } 
    } 
} 

mehr erfahren können Sie this

1

Das ist, weil Sie den Konstruktor ohne Parameter hier nennen:

public Employee GetByID(int id) { 
    using (effMercContext db = new effMercContext()) 
    { 

    } 
} 

Aber in Ihrem DbContext Klasse, die Sie nur haben ein Konstruktor mit einem Parameter:

public class effMercContext : DbContext { 
    public effMercContext(DbContextOptions<effMercContext> options) 
     : base(options) { 
    } 
} 

Blick auf diesen Artikel, um herauszufinden, wie DbContextOptions verwenden: https://docs.efproject.net/en/latest/miscellaneous/configuring-dbcontext.html

+0

ok, also welche Parameter sollte ich weitergeben? –

Verwandte Themen