Ich habe zwei Klassen. Die erste ist dies:Entity Framework-Code zuerst: Wie man eine Eins-zu-Eins-Beziehungen ohne das Konzept von "Principal" und die gleiche ID setzen?
public class User
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Name { get; set; }
public DateTime Birth { get; set; }
public Sex Sex { get; set; }
public List<Album> Albums { get; set; }
public DateTime Created { get; set; }
public Picture ProfilePicture { get; set; }
}
Und das zweite ist dies:
public class Picture
{
public int Id { get; set; }
public Album Album { get; set; }
public string Path { get; set; }
public string Description { get; set; }
public DateTime Created { get; set; }
public User User { get; set; }
}
Bilder werden in einer Tabelle gespeichert, und ein Benutzer kann so viele Bilder haben, wie er in Alben wollen, und sie sind Zugriff über Alben. Hier ist die Album
Klasse:
public class Album
{
public int Id { get; set; }
public User User { get; set; }
public AlbumType Type { get; set; }
public List<Picture> Pictures { get; set; }
public string Name { get; set; }
public DateTime Created { get; set; }
}
ein Picture
Objekt hat, möchte ich in der Lage sein, den User
Besitzer dieses Bild zurückzuholen, so etwas wie picture.User
tun, die derzeit arbeitet. Aber nur eines dieser Bilder kann das Profilbild sein. Da das Profilbild fast immer abgerufen wird, würde Ich mag in Code, so etwas zu tun in der Lage:
LoadPicture(user.ProfilePicture.Id);
Mein Problem ist, dass EF denkt, dass ich in dem eine Eins-zu-Eins-Beziehung erstellen mag ich müssen einen Principal definieren und beide Entitäten müssen dieselbe ID haben. Picture
Entitäten müssen ihre eigene ID haben und User
müssen auch ihre eigene ID haben. Wie kann ich das zu EF so sagen user.ProfilePicture.Id
funktioniert?
Jede Hilfe wird geschätzt.
Verstehe ich richtig, dass das Datenbankmodell nicht geändert werden kann? –
@GertArnold Es kann geändert werden.Die Idee besteht darin, einfach die ID seines Profilbildes in den Datensatz des Benutzers zu schreiben und im Code das Bildobjekt mit einer Codezeile wie 'user.ProfilePicture' zu erhalten. Mit anderen Worten, es sollte in der Benutzertabelle ein Fremdschlüssel mit der ID 'Bild' anstelle eines Fremdschlüssels mit der ID 'Benutzer' in der Bildtabelle vorhanden sein und 'user.ProfilePicture' geschrieben werden können. Ich weiß nicht, wie ich es zuerst mit Code machen soll. Vielleicht kann es nicht gemacht werden. Mit nur EF, vielleicht ja, aber mit Code zuerst, vielleicht nein. – amedina