ich eine einfache Master-Detail-Beziehung ersten EF mit dem Code haben:Entity Framework, mit dem Code zuerst: die Kombination von Master-Detail mit Null-zu-Eins-Beziehung
public class User
{
public string Id { get; set; }
public ICollection<Tasks> Tasks { get; set; }
}
public class Task
{
public string Id { get; set; }
[Required]
public string UserId { get; set; }
public User User { get; set; }
}
Jetzt möchte ich es so modifizieren, dass die Nutzer kann eine einzige, wichtigste Aufgabe haben. So ändere ich die User-Klasse, um es hinzuzufügen:
public class User
{
public string Id { get; set; }
public ICollection<Tasks> Tasks { get; set; }
public string MostImportantTaskId { get; set; }
[ForeignKey("MostImportantTaskId")]
public Task MostImportantTask { get; set; }
}
Als ich Add-Migration
laufen, aber ich bekomme ein unerwartetes Ergebnis. EF versucht, eine User_Id
Spalte auf der Tasks
Tabelle hinzuzufügen, die ich nicht will, und Fallenlassen der Fremdschlüssel ich für den Master/Detail-Beziehung müssen:
public override void Up()
{
DropForeignKey("dbo.Tasks", "UserId", "dbo.Users");
AddColumn("dbo.Tasks", "User_Id", c => c.String(maxLength: 128));
AddColumn("dbo.Users", "MostImportantTaskId", c => c.String(maxLength: 128));
CreateIndex("dbo.Tasks", "User_Id");
CreateIndex("dbo.Users", "MostImportantTaskId");
AddForeignKey("dbo.Users", "MostImportantTaskId", "dbo.Tasks", "Id");
AddForeignKey("dbo.Tasks", "User_Id", "dbo.Users", "Id");
}
public override void Down()
{
// ...
}
Wie pflege ich den Master-Detail-Beziehung zwischen Benutzern und Aufgaben, während der Klasse User
ein Verweis auf eine einzelne Aufgabe hinzugefügt wird?