2011-01-03 17 views
2

Ich kämpfe, um herauszufinden, wie man mit Entity Framework mit Foriegn Keys umgehen kann, wenn man einen neuen Datensatz bearbeitet oder hinzufügt. Zum Beispiel habe ich eine Personentabelle, die eine timezone_id mit meiner Zeitzonentabelle verbindet.ASP.Net Entity Framework und Foreign Keys

Aber das Modell scheint nicht timezone_id enthalten. Ich sehe, es ist eine neue Art, Dinge zu tun, aber ... wie kann ich meine Platte speichern?

Meine Methode:

public static string CreateUser(string username, string email, string password, string firstname, string surname, int timezoneId) 
    { 
     user u = new user(); 
     u.surname = surname; 
     u.firstname = firstname; 
     u.email = email; 
     u.password = password; 
     u.username = username; 
     Db.AddTousers(u); 

     Db.SaveChanges(); 

     return username; 

    } 

kann ich nicht tun u.timezone_id = TimeZoneID;

Ich habe nur u.timezone (was scheint die tatsächliche Entität sein), und u.timezoneReference, die ich nicht sicher bin, was ich damit zu tun habe.

+1

Wenn es um EF geht, sind die Version (en) ziemlich wichtig. –

Antwort

1

Ich glaube, Sie in der Zeitzone Einheit aus der Datenbank zu füllen, das heißt

u.timezone = DB.TimezoneSet.FirstOrDefault(tz => tz.Id == timezoneid); 

vorausgesetzt, Sie den Set-Namen mit EF3 generiert haben; In EF4 wird es standardmäßig 10 sein. Wenn dies EF4 ist, können Sie auch Ihr EDMX für diese Tabelle neu generieren, wobei auch ID-Spalten enthalten sind - auf der Vorderseite des Assistenten gibt es eine Option.

Die TimezoneReference Eigenschaft verwendet wird, ob Entitäten Kind zu testen geladen wurden, sie usw.

+0

Danke Henk! Das hat es getan. – Craig

1

Ich habe nur u.timezone

Ja, das Modell FK als Navigations Eigenschaft aussetzen sollte. Ordnen Sie Ihr TimeZone-Objekt einfach dort zu.

+0

Danke Henk - könntest du dabei helfen? Wie würde ich es zuweisen? Ich dachte, ich könnte u.timezone_id = timezoneid; - Aber ich kann nicht. Wie ordne ich ein Zeitzonenobjekt zu? Meine Dropdown-Liste hat nur eine Beschreibung und und id ... Also, ich gebe die ID in die Methode (int). – Craig

+0

Sie können die ID verwenden, um die TimeZone (aus dem Kontext) nachzuschlagen oder die Listbox so zu ändern, dass sie vollständige Zeitzonen enthält. –

1

laden erzwingen Wenn Sie EF v1 verwenden, und Sie nicht das Objekt hinzufügen möchten, wie es, würden Sie ist müssen dies tun.

u.TimezoneReference.EntityKey = new EntityKey("DB.TimeZone", "ID", id) 

ID ist der Fremdschlüssel.

Wenn Sie EF v4 verwenden und immer noch nicht die forgeign-Schlüssel verfügbar gemacht werden, dann denke ich, dass Sie nicht die Option zum Generieren von Fremdschlüsseln beim Erstellen des Modells überprüft haben.