0

sqlmetal を使用して DBML を生成し、変換を実行してから、sql metal を使用して DataContext クラスを生成しています。さらに、データベースに保存するメタデータに基づいて、エンティティの検証を自動的に生成したいと考えています。各エンティティとその属性。たとえば、エンティティにメタ タイプ "Email" の "EmailAddress" フィールドであることがわかっている場合、Email エンティティの OnValidate メソッドを作成して、正規表現に準拠していることを確認したいと考えています。それはすべてうまくいきます。別のファイルで次のようにすることができます。

public partial class MYENTITY
{
    partial void OnValidate(System.Data.Linq.ChangeAction action)
    {
        if(action != System.Data.Linq.ChangeAction.Delete)
        {
            //check the validity of my email field or anything else
        }
    }
}

この DataContext を使用したい開発者が独自のロジックをこのエンティティの OnValidate メソッドにフックできるようにしながら、どうすればこれを行うことができますか? 私たちの状況では、これは開発中のアプリケーションに固有のビジネス ロジックになります。上記で説明した追加は、データベースに取得されるデータが期待どおりであることを保証するための単なる保護手段です。

助けてくれてありがとう。ここで新しいので、何か間違ったことをした場合はお詫び申し上げます。

4

1 に答える 1

1

私の理解が正しければ、メタダを使用して特定のファイルで OnValidate メソッドを動的に生成できるようにしたいのですが、それでも開発者が OnValidate メソッドにカスタマイズを追加できるようにしたいですか? 1 つの方法は、このテンプレートを使用してコードを生成することです。

public partial class MYENTITY
{
    partial void OnValidateCustomization();

    public void OnValidate(System.Data.Linq.ChangeAction action)    
    {        
        if(action != System.Data.Linq.ChangeAction.Delete)        
        {            
            //hook for code generator
        }   
        OnValidateCustomization();
    }
}

また、開発者は、動的コード ファイル生成を実行するときに既存のファイルを処理する方法に応じて、別のファイルまたは同じファイルに OnValdateCustomization() メソッドを実装します。

public partial class MYENTITY
{
    partial void OnValidateCustomization()
    {
         Console.WriteLine("I Worked.");
    }
}

ただし、コードを動的に生成する方法については仮定しています。生成されたファイルにトークンを入れて、動的コード ジェネレーターを再度実行するときにファイルをコピーするだけでなく、ファイルを変更できるようにすることもできませんか? ファイル全体を置き換えるのではなく、それらのトークンに注入するだけですか? ああ、それは欠けている詳細です...

于 2009-08-15T03:31:19.617 に答える