2017-03-16 3 views
0

Ich versuche, die DbSet Eigenschaft meiner StudentDbContext mit einer Klasse, die den gleichen Namen wie der Namespace hat zu deklarieren."'Student' ist ein Namespace, aber wird wie ein Typ" -Fehler beim Deklarieren von DbSet in DbContext

Das ist mein StudentDbContext Code

using Student.Web.Models;  
using Microsoft.EntityFrameworkCore; 

namespace Student.Web.StudentContext 
{ 
    public class StudentDbContext : DbContext 
    { 
     public StudentDbContext() 
     { 

     } 

     public DbSet<Student> Students { get; set; } 

    } 
} 

Die letzte Zeile des Codes, wo ich DbSet<Student> zu erklären versuche, wirft die Nachricht Fehler:

‚Student‘ ein Namespace ist, aber verwendet wie ein Typ

Dies ist mein Modell mit Namensraum

namespace Student.Web.Models 
{ 
    public class Student 
    { 
     public int StudentId { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 
} 

Ich bin nicht in der Lage zu verstehen, warum dies geschieht. Ich habe eine Modellklasse, die Student genannt wird.

Does .Net-Core Griff Namespaces anders?

+0

Nein, aber Sie haben den Namespace, in dem sich Ihre Student-Klasse befindet, wahrscheinlich nicht deklariert. Sie sollten Ihr Schülermodell einschließlich Namensraum posten – Tseng

+0

@tseng Ich werde nicht entschuldigen. Aber ich habe die Modelldatei mit Namespace hinzugefügt und gezeigt, wie ich sie in meinen dbcontext eingefügt habe. Ich kann nicht herausfinden, was falsch ist. Ich weiß nicht, was ich dort vermisse. – nakulchawla09

Antwort

2

Wenn Sie Konflikte zwischen Namespace & Modellen haben, bewegen Sie die using Anweisung innerhalb der Namespace-Deklaration

using Microsoft.EntityFrameworkCore; 

namespace Student.Web.StudentContext 
{ 
    // Move it here 
    using Student.Web.Models; 

    public class StudentDbContext : DbContext 
    { 
     public StudentDbContext() 
     { 

     } 

     public DbSet<Student> Students { get; set; } 

    } 
} 

namespace Student.Web.Models 
{ 
    public class Student 
    { 
     public int StudentId { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 
} 

Wenn der Compiler für die Klasse sieht es wird zuerst die inneren usings verwenden und wenn es nicht findet, wird für den Typ in den äußeren usings suchen.

Das hat in C# immer so funktioniert und ist mit .NET Core nichts Neues.

Der Grund dafür ist, wenn Sie den Namensraum von Student.Web.StudentContext haben Sie alle Arten in Student.Web.StudentContext zugreifen können, Student.Web und Student ohne using Aussage.

Aber in dem Szenario, das Sie haben, weiß der Compiler nicht, ob Sie die Klasse Student (Namespace) oder Student.Web.Models.Student referenzieren möchten.

Durch Bewegen der using-Deklaration im Inneren festgelegt werden kann, weil der Compiler Student innerhalb Student.Web.Models Namespace finden und nicht suchen weiter nach oben (und endend mit Student Namespace).

Verwandte Themen