2017-03-16 4 views
0

DbSetプロパティの名前をと宣言しようとしています。"Studentは名前空間ですが型のように使用されます" DbContext内でDbSetを宣言しているときにエラーが発生しました

これは

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

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

     } 

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

    } 
} 

私はDbSet<Student>を宣言しようとしていますエラーメッセージを投げているコードの最後の行私のStudentDbContextコードです:

「学生」は名前空間があるが、ありますタイプのように使用

これは名前空間

で私のモデルです
namespace Student.Web.Models 
{ 
    public class Student 
    { 
     public int StudentId { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 
} 

私はこれがなぜ起こっているのか理解できません。私はStudentと呼ばれるモデルクラスを持っています。

.Net Coreは名前空間を異なる方法で処理しますか?

+0

いいえ、Studentsクラスが配置されている名前空間を宣言していない可能性があります。名前空間 – Tseng

+0

@tsengを含む生徒のモデルを投稿する必要があります。ごめんなさい。しかし、モデルファイルに名前空間を追加し、dbcontextにモデルファイルをどのように組み込んでいるかを示しました。私は何が間違っているのか理解できません。私はそこに何が欠けているのか分からない。 – nakulchawla09

答えて

2

名前空間&モデル間の競合を持って、コンパイラは、それが第一の内側usingsを使用して、それになるクラスを探すときの名前空間宣言

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; } 
    } 
} 

using文を動かしますそれを見つけることができない場合は、外部使用の型を検索します。

これはC#で常にこのように機能しています。これは.NET Coreの新機能ではありません。

あなたはusing声明なしStudent.Web.StudentContextStudent.WebStudent内のすべてのタイプにアクセスすることができますStudent.Web.StudentContextの名前空間を持っている場合、この理由は、あります。

しかし、あなたが持っているシナリオでは、Student(ネームスペース)またはStudent.Web.Models.Studentを参照するかどうかはコンパイラが分かりません。コンパイラはさらに、ルックアップ(およびStudent名前空間で終わる)StudentStudent.Web.Models内部の名前空間を見つけてないので、その中使用して宣言は、固定することが可能に移動させることにより

関連する問題