2010-12-26 9 views
2

Ich bin sehr neu in ASP.NET MVC (sowie ASP.NET im Allgemeinen), und werde etwas Wissen für diese Technologie gewinnen, also bin ich Entschuldigung, ich kann einige triviale Fragen stellen. Ich habe ASP.NET MVC 3 RC1 installiert und ich versuche, Folgendes zu tun.Angeben von ASP.NET MVC-Attributen für automatisch generierte Datenmodelle

Nehmen wir an, ich habe ein Modell, das vollständig automatisch aus einer Tabelle mit der Vorlage "LINQ to SQL-Klassen" in VS2010 generiert wird. Die Vorlage generiert 3 Dateien (zwei .cs-Dateien bzw. eine .layout-Datei), und die generierte partielle Klasse wird voraussichtlich als MVC-Modell verwendet. Lassen Sie uns auch überlegen, eine einzelne DB-Säule, die in das Modell abgebildet ist, kann wie folgt aussehen:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Name", DbType = "VarChar(128)")] 
public string Name { 
    get { 
     return this._Name; 
    } 
    set { 
     if ((this._Name != value)) { 
      // ... generated stuff goes here 
     } 
    } 
} 

Die ASP.NET MVC-Engine bietet auch eine schöne deklarative Weise einige zusätzliche Dinge zu spezifizieren, wie RequiredAttribute, DisplayNameAttribute und andere nette Attribute. Aber da das abgebildete Modell ein rein auto-genereated Modell ist, habe ich gemerkt, dass ich nicht das Modell manuell ändern, und geben Sie die Felder wie:

[Required] 
[DisplayName("Project name")] 
[StringLength(128)] 
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Name", DbType = "VarChar(128)")] 
public string Name { 
    ... 

obwohl dieser Ansatz funktioniert perfekt ... bis ich ändern Das Modell im DBML-Designer entfernt die ASP.NET MVC-Attribute automatisch. Also, wie gebe ich ASP.NET MVC-Attribute für die DBML-Modelle und ihre Felder sicher?

Vielen Dank im Voraus und Frohe Weihnachten.


Update # 1:

Während für Antworten erwarten, habe ich solche Sachen gefunden:

Antwort

0

Da ich keine Hilfsklassen erstellen möchte, habe ich den Artikel gefunden, der meine Anforderungen am meisten erfüllt. Allerdings ist dieser Ansatz aus irgendeinem Grunde nicht funktionieren, aber ich glaube immer noch, dies wegen meines Mangels an ASP.NET MVC Erfahrung ist (siehe Step 4: Creating a Custom [Email] Validation Attribute):

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

1

Der korrektere Ansatz besteht darin, entsprechende DTOs (ViewModels oder wie auch immer Sie es nennen) zu erstellen und diese DTOs mit Tools wie AutoMapper zu Ihren Datenmodellobjekten zuzuordnen (übersetzen Sie Ihre fetten Datenmodellobjekte in saubere Objekte und umgekehrt).

Es gibt einige Tools, die diese Aufgabe (Erstellen von DTOs) für Sie übernehmen und diese DTOs generieren.

Schauen Sie sich VS Galerie und Chancen finden Sie viele Optionen.

Vielleicht finden Sie ein schönes Beispiel wie MicrosoftNLayerApp mit all diesen Techniken wird Sie durch diesen Prozess führen.

Und schließlich Ihre Antwort ist, DTO-Klasseneigenschaften mit DisplayName-Attribut zu kommentieren.

+0

+1, ist der Schlüssel bis zu geben, ist auf die Idee, ein Datenobjekt zu haben, um alle zu regeln.Es ist zunächst ein schwerer Kampf, aber es lohnt sich. –

+0

Danke für die Antwort, Jani. Ich habe jedoch ein Beispiel gefunden, das näher an meinem ist. Genommen von http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx, verwendet 'MetadataTypeAttribute', aber aus irgendeinem Grund funktioniert es nicht . –

+0

@Lyubomyr Ich dachte, es ist nur für die Validierung nicht die Funktionalität von DisplayName, bin ich falsch? –

Verwandte Themen