Entity Framework Code First und Auffüllen von join-Tabellen
Ich geübt mit EF Code First, SQL Express, und ASP.Net MVC3.
Wenn ich die erste website die richtigen Tabellen werden erzeugt, indem die FooInitializer
und Student
und Image
aufgefüllt werden, aber für einige Grund der join-Tabelle (StudentImages
) ist nicht aufgefüllt.
Was könnte das Problem sein?
Tabellen: Student
, Image
, und StudentImages
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Image> Images { get; set; }
}
public class Image
{
public int Id { get; set; }
public string Filename { get; set; }
public string Extension { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
public class FooInitializer : DropCreateDatabaseIfModelChanges<DBContext>
{
protected override void Seed(DBContext context)
{
var students = new List<Student> {
new Student { Id = 1, Name = "John" },
new Student { Id = 2, Name = "Jane" }
};
students.ForEach(s => context.Students.Add(s));
context.SaveChanges();
var images = new List<Image> {
new Image { Id = 1, Filename = "IMG_4596.JPG", Extension = ".jpg" },
new Image { Id = 2, Filename = "IMG_4600.JPG", Extension = ".jpg" }
};
images.ForEach(i => context.Images.Add(i));
students[0].Images.Add(images[0]);
context.SaveChanges();
}
}
Sie versuchen diese nun - Dank
InformationsquelleAutor Nicholas Murray | 2011-08-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ich sagen kann, Ihr Image-Klasse keine Referenz auf das StudentID. Versuchen Sie, hinzufügen:
auf die Image-Klasse vielleicht?
Auch eine ICollection würde das bedeuten, dass ein Bild, dass mehrere Studenten - ist das richtig? Vielleicht sollte es ein public virtual Student Student {...}
EDIT: Auch ich fand diesen, mit einer viele zu viele Beziehung (wenn es das ist, was Sie brauchen):
In Ihrem OnModelCreating () - Methode:
entnommen diese link, der besagt:
EDIT: Hier ist der code, den ich verwendet, die andere Nacht, mit meiner Implementierung die erste code-MVC-Website:
Beachten Sie in jedem Element instanziiert, ich bin auch instanziieren eines neuen referenzierte Element innerhalb des übergeordneten Objekts.
EDIT:
Ok, versuchen Sie dies:
mit dem code, den gemäß den in der Frage Hinzugefügt, die modelBuilder-code oben und noch keine Daten in der verknüpften Tabelle
werde später versuchen Sie die Updates für Ihre Antwort
versucht, meine code mit den Ihren übereinstimmen und ich erhalte eine Ausnahme Objektverweis nicht auf eine Instanz eines Objekts. bei dem äquivalenten Linie an Ihre Benutzer[0].Rollen."Hinzufügen" (Rollen[0]);
Können Sie Ihre gesamte neue code für diese test-Daten?
InformationsquelleAutor Jack
Versuchen Sie, diese vor der Speicherung der änderungen für jeden Schüler:
Versuchen, auch mit System.Daten.EntityState.Geändert.
Hoffe, das funktioniert...
InformationsquelleAutor AJC