2016-05-16 10 views
0

私はC#プロジェクト、つまりEntity Frameworkの自動生成コードに部分的なクラスがあります。今度は、そのクラスにいくつかの機能、プロパティ、またはメソッドを変更または追加したいと思います。プロジェクトのEntityFrameworkModel.tt\Author.csタブの下に自動生成クラスコードがありますが、他の関連クラスは別のフォルダにあります。つまり、同じプロジェクト内のGraphDataです。C#の部分クラスの変更/追加

また、部分クラスの名前は同じである必要がありますが、ファイル名は同じである必要はありません。私は同じでしたが、私のようにAuthor.csのオブジェクトを定義したとき:

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

EntityFrameworkModel.tt\Author.csで定義されたプロパティのみがアクセス可能であるのに対し、IはGraphData\Author.cs(例えば、コードで疑問符)で定義されたメソッドにアクセスすることができません。

ここで私はとSolution Explorer画像を添付:私は両方のクラスからプロパティやメソッドにアクセスするにはどうすればよい

enter image description here

+1

両方のクラス – octavioccl

+0

@octavioccl宣言された名前空間を含め、私はまだ – maliks

+0

@octavioccl良いポイントにアクセスすることができませんでし追加されました2つのファイルで名前空間が一致することを確認してください。それ以外の場合は、実際に定義している2つの部分クラスです。また、 'GraphData \ Author.cs'ファイルが' Compile'の 'Build Action'に含まれていることを確認し、実際にあなたのアセンブリにコンパイルされていることを確認します。 – Zack

答えて

1

私はプロジェクトでも同様の設定をしています。

私は特定の部分クラスを配置するフォルダもあります。名前空間が自動生成クラスと同じであることを確認する必要があります。

新しいクラスをフォルダに追加すると、名前空間には自動的にフォルダの名前が含まれます。名前空間からフォルダ名を削除することができます。このシナリオでは、プロジェクト名を入力してください。

名前空間が異なる場合、部分クラスは同じクラスの一部ではありません。これは、新しい関数/プロパティにアクセスできないためです。

また、ファイル名とクラス名が異なる場合でも、ファイル名とクラス名が同じであれば、クラスを簡単に見つけることができます。

+0

名前空間は同じですが、フォルダ名を削除すると 'Namespace.FolderName'というフォルダ名を削除すると、コンパイル時に' FolderName'が存在しないというエラーが表示され、両方からすべてのプロパティにアクセスできるようになります – maliks

+0

別の部分クラスを別のフォルダに追加できないのはなぜですか? – maliks

+0

あなたのコードの別の部分で 'Namespace.FolderName'をどこかで使っているのでエラーですか?パーシャルクラスから 'FolderName'を削除したので、コードの他の部分で' Namespace.FolderName'を使う必要はありません。 – Rick

0
  • 独自のクラスをEntityFrameworkModel.ttの外に作成します。名前をAuthor.csとし、クラスをpartialにします。

部分的な考えは、コード生成者がコードを気にしないことです。生成されたクラスを変更すると、次の再生成によって変更が強制終了されます。

私は同じでしたが、私のようにAuthor.csのオブジェクトを定義したとき:

オーバーライドを保護

ああ、あなたはあなたの定義があると主張するので、いいえ、あなたはしませんでしたEvoObject ConvertCPV(著者_author)

これは、オブジェクトを定義していないものです。

私はGraphData \ Author.csに

名前空間なのでを定義されたメソッドにアクセスすることはできませんか?名前空間をチェック - EntityFrameworkModel.tt \ Author.csで定義されたプロパティのみ アクセス可能なのに対し、彼らはEntityFrameworkModel.tt

と同じ名前空間に属している場合、サブフォルダでそれらを持っている悪いです。

パーシャルクラスでは、他のパーシャルの変更が許可されていません。現在のところそうではありません。置換構文が考慮されます。

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."); 
     } 
    } 
} 
関連する問題