2009-08-14 9 views
0

Wir verwenden sqlmetal, um unsere DBML zu generieren, führen sie durch eine Transformation und verwenden dann sql metal, um die DataContext-Klassen zu erzeugen - zusätzlich möchte ich automatisch eine Validierung für die Entitäten generieren auf einigen Metadaten, die wir in der Datenbank über jede Entität und ihre Attribute speichern. Wenn eine Entität zum Beispiel das Feld "E-Mail-Adresse" des Metatyps "E-Mail" enthält, möchte ich die OnValidate-Methode für die E-Mail-Entität erstellen, um zu überprüfen, ob sie meinem regulären Ausdruck entspricht. Das ist alles schön und gut, und ich kann in einer anderen Datei es wie folgt tun:Mehr Validierung für generierte Linq-Entity-Klassen

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

Wie kann ich tun, um diese während immer noch die Entwickler ermöglicht, die diese Datacontext die Möglichkeit nutzen wollen ihre eigene Logik in den OnValidate einzuhaken Methode für diese Entität? In unserer Situation wäre dies eine Geschäftslogik, die für die zu entwickelnde Anwendung spezifisch ist. Die Ergänzungen, die ich oben beschrieben habe, sind nur Sicherheitsmaßnahmen, um sicherzustellen, dass Daten, die in die Datenbank gelangen, so sind, wie ich es erwarte.

Danke für jede Hilfe. Neu hier, also Entschuldigung, wenn ich etwas falsch gemacht habe.

Antwort

1

Wenn ich Sie richtig verstehe, möchten Sie in der Lage sein, dynamisch die OnValidate-Methode in einer bestimmten Datei mithilfe Ihrer Metada zu generieren, aber Ihren Entwicklern weiterhin die OnValidate-Methode anpassen zu lassen? Eine Möglichkeit wäre, den Code mit dieser Vorlage zu generieren:

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(); 
    } 
} 

Und hat Ihre Entwickler, in einer anderen Datei oder in der gleichen Datei, je nachdem, wie Sie vorhandene Dateien behandeln, wenn Ihre dynamische Code-Datei Generation laufen, implementieren die OnValdateCustomization() -Methode:

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

aber ich mache Annahmen darüber, wie Sie dynamisch Code erzeugt werden. Könnten Sie nicht auch Token in die generierten Dateien einfügen und Änderungen der Dateien zulassen, anstatt sie einfach zu kopieren, wenn Sie den dynamischen Codegenerator erneut ausführen? Sie injizieren also einfach diese Token, anstatt die ganze Datei zu ersetzen? Argh, es sind die fehlenden Details ...

Verwandte Themen