2011-09-02 17 views
15

Birleşim tablosu oluşturduğum bir ilişki var iki varlık varSipariş için EF Kodu İlk Ek sütunu

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 virtual ICollection<Student> Students { get; set; } 
} 


protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 

     modelBuilder.Entity<Student>() 
      .HasMany(i => i.Images) 
      .WithMany(s => s.Students) 
      .Map(m => m.ToTable("StudentImages")); 
} 

Öğrenci Kitaplığı'nın kronolojik sıralamasına izin vermek için ek bir sütun eklemek istiyorum.

İlgili kodu nereye eklemeliyim?

cevap

24

Bu yeni sütunu uygulamanızda kullanmak ister misiniz? Böyle bir durumda, bunu modelinizle yapamazsınız. Çoktan çoğa ilişkisi yalnızca bağlantı tablosunun ana tablolardan yabancı anahtarlardan başka bir şey içermemesi durumunda çalışır. Uygulamanıza ek bir sütun ekledikten sonra, bağlantı tablosu başka biri olarak varlık olur = üçüncü sınıfa ihtiyacınız olur. Modeliniz gibi görünmelidir:

public class StudentImage 
{ 
    public int StudentId { get; set; } 
    public int ImageId { get; set; } 
    public int Order { get; set; } 
    public virtual Student Student { get; set; } 
    public virtual Image Image { get; set; } 
} 

public class Student 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<StudentImage> Images { get; set; } 
} 


public class Image 
{ 
    public int Id { get; set; } 
    public string Filename { get; set; } 
    public virtual ICollection<StudentImage> Students { get; set; } 
} 

Ve haritalama yanı değiştirmelisiniz:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<StudentImages>().HasKey(si => new { si.StudentId, si.ImageId }); 

    // The rest should not be needed - it should be done by conventions 
    modelBuilder.Entity<Student>() 
       .HasMany(s => s.Images) 
       .WithRequired(si => si.Student) 
       .HasForeignKey(si => si.StudentId); 
    modelBuilder.Entity<Image>() 
       .HasMany(s => s.Students) 
       .WithRequired(si => si.Image) 
       .HasForeignKey(si => si.ImageId); 
} 
+0

hmmm, bu ben ne var tutabilir acaba vb Student.Images erişimi kaybedecek demektir Şu anda ayrı bir StudentImagesOrder varlığı yaratın ve kodun bunu ilk oluşturup bu bilgiyi orada saklamasına izin verin. –

+0

Bir yıl sonra aynı soruna sahip olmak ve bu arama yaparken google üzerinde en iyi hit biri olmak - ben hala mevcut uygulama eğer fazla sütun ekleyerek birçok ilişkiyi kaybedersem merak ediyorum. (bu durumda student.images?) –

+0

@ s093294: Evet durum aynı ve değişmeyecek. Birleşim tablosuna yeni bir sütun eklerseniz, yeni sütuna erişim sağlamak için birçok ilişkiden ziyade bir çok ilişkiye ihtiyaç duyarsınız. –

İlgili konular