c#mvc区域文件夹结构和类名

c#mvc区域文件夹结构和类名,c#,.net,asp.net-mvc,directory-structure,C#,.net,Asp.net Mvc,Directory Structure,我有一个web项目,其中文件夹是在区域中构建的。在那里,我有两个主要文件夹:Admin和Home。在主页部分,我会把所有关于最终用户的信息都放进去,而管理员是我的后台。在Admin文件夹中,我将模型和视图划分为子文件夹。如以下示例所示: Areas - Admin - Controllers - CategoryController.cs - UserController.cs - Models - Category

我有一个web项目,其中文件夹是在
区域中构建的。在那里,我有两个主要文件夹:Admin和Home。在主页部分,我会把所有关于最终用户的信息都放进去,而管理员是我的后台。在Admin文件夹中,我将模型和视图划分为子文件夹。如以下示例所示:

Areas
  - Admin
     - Controllers
        - CategoryController.cs
        - UserController.cs
     - Models 
        - Category
          - Edit.cs
          - Create.cs
          - Index.cs
        - User
          - Edit.cs
          - Create.cs
          - Index.cs
     - Views
        - Category
          - Edit.cshtml
          - Create.cshtml
          - Index.cshtml
        - User
          - Edit.cshtml
          - Create.cshtml
          - Index.cshtml
  - Home 
     ...
我想到目前为止还不错。因为我正在使用LINQtoSQL,并且其中有一个名为Category的表,所以名称空间和表名给我带来了一些问题。在Category/Edit.cs中说:

namespace MyProject.Areas.Admin.Models.Category
{
    public class Edit
    {
        public IQuaryable<Category> // this throws an intellisense error since it
                                    // understands "Category" as the folder/namespace
                                    // instead of the table name in linq to sql class
名称空间MyProject.Areas.Admin.Models.Category
{
公共类编辑
{
public IQuaryable//这会引发intellisense错误,因为
//将“类别”理解为文件夹/命名空间
//而不是linq to sql类中的表名
嗯,我知道解决方案很简单:将表名更改为其他名称。但是为了代码的可读性,我希望有一个清晰的表名和一个清晰的URL,我希望文件夹名保留为类别。因此,有人能告诉我如何区分名称空间和表类吗

编辑


虽然我喜欢这个答案,但我重新设计了我的文件夹结构和类名。当我保持L2S类名不变时,我将模型命名为
modelcontegory
,并试图避免在models文件夹中使用L2S类名的子文件夹。此外,我在
modelcontegory中合并了
Edit.cs-Create.cs-Index.cs
e> 因为它们或多或少使用相同的模型。因此,我删除了模型中的Category子文件夹,问题就出现了。

添加一个using语句,让编译器知道在哪里可以找到
Category
实体/表:

using MyProject.SomeLinqToSqlNamespace;

namespace MyProject.Areas.Admin.Models.Category
{
    public class Edit
    {
        public IQueryable<Category> // this throws an intellisense error since it
                                    // understands "Category" as the folder/namespace
                                    // instead of the table name in linq to sql class
        // ...other code
    }
}
使用MyProject.SomeLinqToSqlNamespace;
命名空间MyProject.Areas.Admin.Models.Category
{
公共类编辑
{
public IQueryable//这会引发intellisense错误,因为
//将“类别”理解为文件夹/命名空间
//而不是linq to sql类中的表名
//…其他代码
}
}
或者,使用内联命名空间作为类的前缀:

public IQueryable<MyProject.SomeLinqToSqlNamespace.Category>
公共IQueryable

…但阅读起来可能会比较混乱。

除了Yuck的建议之外,您还可以添加一个带有别名的using语句,以减少代码的冗长,例如:

using L2S = MyProject.SomeLinqToSqlNamespace;

现在您可以将category实体简单地称为L2S.category

好吧,我猜名称空间MyProject.Areas.Admin.Models.category已经定义了一个查找编译器的位置,因此将有两个已定义的类别。如何处理?每次创建类时是否必须更改名称空间?不,但您不能只说
Category
如果存在多种可能性。编译器需要更多信息来区分
MyProject.Areas.Admin.Models.Category
MyProject.something.something.Linq.Category
。由于您在
Edit
类定义中提供了一个名称空间,因此它将首先在那里查找
Category