“'学生'是一个名称空间,但用于类型”错误,同时在DbContext中声明DbSet
问题描述:
我试图使用与名称空间具有相同名称的类来声明StudentDbContext
的DbSet
属性。“'学生'是一个名称空间,但用于类型”错误,同时在DbContext中声明DbSet
这是我StudentDbContext
代码
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>
抛出错误消息的最后一行:
“学生”是一个命名空间,但为使用像一个类型
这是我的模型命名空间
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是否处理命名空间不同?
答
听起来就像你有一个命名空间和一个名为Student的类。不太好。为了解决这个问题,你可以在类名的前面加上名称空间;像Student.Student一样。但最好的想法是重命名命名空间,我会说!
答
当你有命名空间&模型之间的冲突,将using
声明命名空间声明
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; }
}
}
内。当编译器查找类,会先使用内部usings,当它没有找到它,将搜索外部使用中的类型。
这在C#中一直都是这样工作的,而.NET Core并不是什么新东西。
这样做的原因是,当你有Student.Web.StudentContext
的命名空间,你可以访问所有类型的Student.Web.StudentContext
,Student.Web
和Student
没有using
声明。
但是在你有的情况下,编译器不知道你是否想引用Student
(命名空间)或Student.Web.Models.Student
这个类。
通过移动使用声明中可以固定的,因为编译器会发现里面Student
命名空间Student.Web.Models
而不是进一步的查找(与Student
命名空间结束)。
不,但您可能没有声明学生课程所在的名称空间。你应该发布你的学生模型,包括命名空间 – Tseng
@tseng我dint让你感到抱歉。但是我添加了名称空间的模型文件,并显示了我如何将它包含在我的dbcontext中。我无法弄清楚什么是错的。我不知道我在那里失去了什么。 – nakulchawla09