0

私の ASP MVC プロジェクトでは、プロジェクトに新しいテーブルを追加するたびに、2 つのモデルが作成されます。1 つはテキスト テンプレート変換ツールキット (拡張子付きのファイル.tt) の下にあり、もう 1 つはこの外側の一般的なModelsフォルダーにあります (これは、ファイルの末尾に "1" をデフォルトとして付けたいようです)。

ここに画像の説明を入力

データベースに変更が加えられるたびに、.ttそのテーブルのデータベースに現在存在するフィールドに従って、ファイルの下のすべてのモデルが更新されるようです。この外側のファイルは一般的なModelsフォルダーですが、そのまま残されます。このため、すべてのモデル検証メソッドをこれらの.csファイルに入れました (ファイル名の末尾に「1」を付けます)。

ただし、あるインスタンスで.ttは、別のファイルで検証を実行するために、ファイルの下のモデルからフィールドを削除する必要がありました.cs。これは私が実行する検証です:

    private string agentId;

    //here, AgentId overrrides the field in the BankListAgentId.cs file, 
    //which MUST be commented out.
    [DisplayName("Agent ID")]
    public string AgentId
    {
        get { return agentId; }
        set { agentId = this.scrubAgentId(value); }
    }

.csこのファイルで、AgentIdここのフィールド (名前の末尾に「1」があるファイル) がAgentId field in the.cs file found under the.tt` ファイルをオーバーライドするように指定する方法はありますか?

4

1 に答える 1

0

私の知る限り、それはできません。しかし、あなたができるいくつかのトリックがあります。

  1. あなたのプロパティの名前を例えばに変更してください。また、EDMX でそのフィールドを保護または非公開に変更します。次に、InternalAgentId へのコード参照で:

    public string AgentId
    {
        get { return this.InternalAgentId; }
        set { this.InternalAgentId = this.ScrubAgentId(value); }
    }
    

    linq でそのプロパティが必要な場合は、Microsoft Linq Translationを参照してください。

  2. もう 1 つの方法は、T4 を変更して部分的なメソッドを生成し、生成されたプロパティ内でそれを呼び出すことです。Entity Framework テンプレートの 1 つが既にそれを行っていると思います。

于 2013-05-15T19:57:36.090 に答える