2011-07-01 64 views
2

我有一個web項目,其中的文件夾是在areas內構建的。在那裏,我有兩個主要文件夾:管理員和主頁。在Home部分,我將把與最終用戶有關的所有信息放在我的後臺。在Admin文件夾中,我將模型和視圖分爲子文件夾。就像下面這個例子:c#mvc區域文件夾結構和類名

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 
    ... 

我猜這很好。由於我使用Linq to Sql,並且在其中有一個名爲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 

那麼,我知道解決方案很容易:將表名更改爲別的。但爲了代碼的可讀性,我希望有一個明確的表名,並且要有一個明確的URL,我希望文件夾名稱保留爲類別。那麼請有人能告訴我如何區分名字空間和表類嗎?

編輯

雖然我喜歡這個答案,我重新設計了我的文件夾結構和類名。儘管我離開了L2S類名,但我將模型命名爲ModelCategory,並試圖避免使用名爲L2S類的Models文件夾中的子文件夾。此外,我將Edit.cs - Create.cs - Index.cs合併到ModelCategory,因爲它們或多或少地使用相同的模型。因此,我刪除了模型中的類別子文件夾,並且問題消失了。

回答

4

除了呸的建議,你還可以添加一個using語句使用別名,使代碼更簡潔,如:

using L2S = MyProject.SomeLinqToSqlNamespace; 

,現在您可以參考類實體簡稱爲L2S.Category

+0

我喜歡這個建議:) – Shaokan

+0

@Jonas:非常酷,我沒有意識到這一點。 – Yuck

3

添加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 
    } 
} 

或者與命名空間內聯前綴類:

public IQueryable<MyProject.SomeLinqToSqlNamespace.Category> 

...但是閱讀起來可能相當麻煩。

+0

那麼,我猜MySpace的命名空間MyProject.Areas.Admin.Models.Category已經定義了一個地方尋找編譯器,因此將有兩個定義的類別。如何處理?每次創建課程時,是否必須更改名稱空間? – Shaokan

+0

不,但如果存在多種可能性,則不能只是說「類別」。編譯器需要更多的信息來區分'MyProject.Areas.Admin.Models.Category'和'MyProject.something.something.Linq.Category'。由於您在'Edit'類定義中提供了一個名稱空間,因此它將首先查找「Category」。 – Yuck