2016-05-16 61 views
0

我已經在我的C#項目中獲得了部分類,即從實體框架自動生成的代碼。現在我想修改或添加一些更多的功能,屬性或方法。我在項目的EntityFrameworkModel.tt\Author.cs選項卡下有自動生成的班級代碼,而其他相關班級在另一個文件夾中,即同一項目中的GraphData修改/添加到C#部分類

我也知道部分類的名稱應該是相同的,而文件名也可以不同或相同。我也一樣,但是當我所定義的對象作爲Author.cs

protected override EvoObject ConvertCPV(Author _author) 
{ 
    if (_author.???) 
    { 
     //... 
    } 
} 

我不能訪問GraphData\Author.cs(在示例代碼問號)中定義的方法,而在EntityFrameworkModel.tt\Author.cs定義的屬性僅是可訪問的。

這裏我附Solution Explorer形象:

enter image description here

我如何可以訪問這兩個類的屬性和方法?

+1

包括在那裏被宣佈@octavioccl我已經加入仍然無法訪問 – octavioccl

+0

的命名空間,請確保確保名稱空間在兩個文件中匹配,否則它實際上是您定義的兩個不同的部分類。我還要檢查確保你的'GraphData \ Author.cs'文件包含在'Compile'的'Build Action'中,以確保它實際上被編譯到你的程序集中。 – maliks

+0

@octavioccl好點的兩個類 – Zack

回答

1

我在項目中也有類似的設置。

爲了保持整潔,我還在文件夾中放置了某些部分類,您只需確保命名空間與自動生成的類相同。

將新類添加到文件夾時,名稱空間將自動包含文件夾的名稱 - 只需從名稱空間中刪除文件夾名稱 - 在此方案中應該只有項目名稱。

如果名稱空間不同,則部分類不屬於同一類。這就是您無法訪問新功能/屬性的原因。

此外,即使您的文件名和類名可能不同,最好讓它們保持一致 - 如果文件具有相同的名稱,則更容易找到類。

+0

命名空間是相同的,但當我刪除文件夾名稱爲:'Namespace.FolderName'當我刪除文件夾名稱,我得到一個錯誤,當編譯時'FolderName'不存在,我也能夠訪問從 – maliks

+0

爲什麼我不能在其他文件夾中添加其他部分類? – maliks

+0

錯誤是因爲您在代碼的另一部分使用'Namespace.FolderName'嗎?現在您已經從Partial Class中刪除了'FolderName',您不需要在代碼的其他部分使用'Namespace.FolderName'。 – Rick

0
  • 在EntityFrameworkModel.tt之外創建自己的類 - 將其命名爲Author.cs,使類不完整。

部分的整個想法是讓代碼生成器不關心你的代碼。你修改一個生成的類,下一次再生殺死更改。

我也一樣,但是當我定義的對象Author.cs爲:

啊,不,你沒有,因爲你要求你的定義是:

保護覆蓋EvoObject ConvertCPV(作者_作者)

哪個不定義th對象。

我無法訪問GraphData \ Author.cs定義

因爲命名空間的方法呢?檢查命名空間 - 壞,讓他們在一個子文件夾,當他們在同一個命名空間屬於作爲EntityFrameworkModel.tt

而在EntityFrameworkModel.tt \ Author.cs定義的屬性只 訪問。

部分類別不允許更改另一部分 - 暫時不考慮替換語法。

0

退房https://msdn.microsoft.com/en-us/library/wa80x488.aspx

它說"The partial keyword indicates that other parts of the class, struct, or interface can be defined in the namespace."它沒有明確說明這一點,但是這意味着類的部分定義必須在相同命名空間中聲明。不要緊,哪些文件在項目所包含的類,或他們是在什麼樣的文件夾。

using System; 

namespace DemoConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SameNamespace.PartialClass.MethodOne(); 
      SameNamespace.PartialClass.MethodTwo(); 
      DifferentNamespace.PartialClass.MethodThree(); 
     } 
    } 
} 

namespace SameNamespace 
{ 
    public partial class PartialClass 
    { 
     public static void MethodOne() 
     { 
      Console.WriteLine("Method One."); 
     } 
    } 

    public partial class PartialClass 
    { 
     public static void MethodTwo() 
     { 
      Console.WriteLine("Method Two."); 
     } 
    } 
} 

namespace DifferentNamespace 
{ 
    public partial class PartialClass 
    { 
     public static void MethodThree() 
     { 
      Console.WriteLine("Method Three."); 
     } 
    } 
}