2011-01-04 8 views
0

Ich habe 2 Projekte. Ein Datenprojekt, das meine Datenbank und mein Entity Framework-Modell enthält. Ich habe eine Tabelle mit dem Namen "Benutzer" und dann eine generierte EF-Klasse für den Benutzer.ASP.Net (3.5) MVC teilweise Klasse für die Überprüfung der Regel

Ich versuche, eine Teil-Klasse hinzuzufügen:

using System; 
using System.Collections.Generic; 
using System.Data.Linq; 
using System.Linq; 
using System.Text; 

namespace Data 
{ 
    public partial class user 
    { 

     public bool isValid 
     { 
      get { 
       return (GetRuleViolations().Count()==0); 
      } 
     } 

     public IEnumerable<RuleViolation> GetRuleViolations() 
     { 
      yield break; 
     } 



     partialvoid OnValidate(ChangeAction action) 
     { 
      if (isValid) 
       throw new ApplicationException("Rule violation prevents saving"); 
     } 
    } 

    public class RuleViolation 
    { 
     public string ErrorMessage { get; private set; } 
     public string PropertyName { get; private set; } 

     public RuleViolation (string errorMessage) 
     { 
      ErrorMessage = errorMessage; 
     } 

     public RuleViolation(string errorMessage, string propertyName) 
     { 
      ErrorMessage = errorMessage; 
      PropertyName = propertyName; 
     } 
    } 
} 

Dies wird nach dem NerdDinner Beispiel 1.0 MVC. Allerdings bin ich ein Design-Zeitfehler auf dem OnValidate Methode bekommen:

partial void OnValidate(ChangeAction action) 
    { 
     if (isValid) 
      throw new ApplicationException("Rule violation prevents saving"); 
    } 

Keine definining Erklärung für implimenting Erklärung Teil Methode ‚Leere OnValidate (Change action)‘

gefunden Was mache ich falsch?

+0

Ich bin mir immer noch nicht sicher, was ich hier falsch mache. – Craig

Antwort

0

Es sollte eine andere Datei geben, die den Rest der Benutzerklasse enthält.

In dieser Datei müssen Sie angeben, dass es eine partielle Methode namens OnValidate geben könnte.

public partial class user 
{ 
    partial void OnValidate(ChangeAction action); 
} 

Einige Detail: Eine partielle Methode braucht eine Unterschrift irgendwo angegeben haben. Sobald die Signatur definiert wurde, kann eine optionale Implementierung angegeben werden. Lesen Sie http://msdn.microsoft.com/en-us/library/wa80x488.aspx für weitere Informationen.

+0

Danke. Die ursprüngliche Klassendatei wird generiert und als partiell markiert. Es hat jedoch keine OnValidate-Methode. Die Klasse/Methode wird jedoch generiert, wenn ich mein Entity Framework-Modell anlege. Ich glaube nicht, dass ich es modifizieren würde und eine Methode hinzufügen würde, sollte ich? Ich dachte, die Idee wäre, dass mein nicht generierter Code in meiner benutzerdefinierten partiellen Klassendatei wäre, wobei die ursprüngliche (generierte) Klasse nicht berührt würde. Wenn ich das nächste Mal das EF-Modell erzeuge, verliere ich die Änderungen. – Craig

+0

Das Problem war, ich benutzte das Teilobjekt Entity Framework. Das Buch verwendet das LINQ to SQL-Objekt. – Craig

+0

Es gibt nichts, was Sie davon abhält, eine weitere Teildefinition für Ihre Klasse zu erstellen und die EF auch zu erzeugen. In diesem Fall hätten Sie Ihre generierte Datei, Data.cs (Ihre Hauptimplementierung) und Data.Validation.cs, wo Sie Ihre OnValidate-Methodensignaturen definieren können. – WilliamB

Verwandte Themen