2009-05-05 11 views
2

Warum SqlMetal die Association-Namen versaut. Für z.B. In meiner Tabelle 'TextMessage' habe ich zwei Spalten, die auf die Tabelle 'ApplicationUser' verweisen. 'SenderUserId' und 'RecipientUserId'SqlMetal generiert Müll Association-Namen

Wenn ich SqlMetal laufen und schaue auf meine 'ApplicationUser' Klasse

Für 'RecipientUserId' es erzeugt:

[Association(Name="FK__TextMessa__Recip__72910220", Storage="_TextMessages", ThisKey="Id", OtherKey="RecipientUserId", DeleteRule="NO ACTION")] 
     public EntitySet<TextMessage> TextMessages 
     { 
      get 
      { 
       return this._TextMessages; 
      } 
      set 
      { 
       this._TextMessages.Assign(value); 
      } 
     } 

und für 'SenderUserId' es diesen Müll erzeugt benannte Eigenschaft:

[Association(Name="FK__TextMessa__Sende__73852659", Storage="__TextMessa__Sende__73852659s", ThisKey="Id", OtherKey="SenderUserId", DeleteRule="NO ACTION")] 
     public EntitySet<TextMessage> _TextMessa__Sende__73852659s 
     { 
      get 
      { 
       return [email protected]__TextMessa__Sende__73852659s; 
      } 
      set 
      { 
       [email protected]__TextMessa__Sende__73852659s.Assign(value); 
      } 
     } 

Wie kann ich das beheben? Dies ist unbrauchbar. Gibt es eine bessere Möglichkeit, Linq To Sql Code zu generieren ???

Antwort

1

Sie können SqlMetal anweisen, eine DBML-Datei zu erzeugen:

SqlMetal /server:myserver /database:northwind /dbml:northwind.dbml /namespace:nwind 

und dann die Assoziations Namen in der DBML Datei korrigieren und dann erzeugen aus der DBML:

SqlMetal /code:nwind.cs /map:nwind.map northwind.dbml 

Das einzige Problem mit dem Tun Wenn Sie die DBML nach der Aktualisierung Ihrer Datenbank erneut generieren, werden alle Änderungen an Ihrer DBML ausgespült.

Weitere Optionen:

  • Verwenden Designer Visual Studio (nicht toll, wenn Ihr Schema groß ist)
  • Suche nach einem Drittanbieter-Tool zu generieren Datacontexts
  • Schreiben Sie Ihre eigene Werkzeug

Ein weiterer Punkt: Ich habe selten gesehen, SqlMetal einen Assoziationsnamen so schlecht emittieren. Wie heißen Ihre Spalten? Gibt es einen Konflikt mit einem anderen Beziehungsnamen?

2

Es generiert den Namen basierend auf dem Fremdschlüssel. Benennen Sie Ihren Fremdschlüssel etwas lesbarer als den automatisch generierten Namen. Beispiel:

Einschränkung RecipientMessages FOREIGN KEY (RecipientUserId) Verweise ApplicationUser (UserId)