2012-04-14 15 views
6

Kod tabloları aracılığıyla ilk akıcı api (veri tabanını databaseanswers.org'da bulunan bir model kullanıyorum) üzerinden dönüştürmek istediğim dört varlığım var. nasıl olduğu konusunda emin değilim. Sorun şu ki, ÖnerilenMenüId, Kompozit anahtardaki (MenuCourse ve CourseRecipeChoice) iki farklı tabloya taşınıyor. İşte Kod Birleşim Tablosundaki İlk Akıcı API ve Gezinme Özellikleri

alıyorum mesajdır:

"Bir veya daha fazla doğrulama hatası modeli oluşturma sırasında tespit edilmiştir: tSystem.Data.Entity.Edm.EdmAssociationConstraint \

: mülklerin sayısı İlişki kısıtındaki Bağımlı ve Asıl Rollerin aynı olması gerekir. " İşte

public class CourseRecipeChoiceConfiguration : EntityTypeConfiguration<CourseRecipeChoice> 
{ 
    public CourseRecipeChoiceConfiguration() 
    { 
     HasKey(crc => new { crc.Id}); 
     HasRequired(r => r.Recipe).WithMany(crc => crc.CourseRecipeChoices).HasForeignKey(crc => crc.RecipeId); 
     HasRequired(m => m.MenuCourse).WithMany(crc => crc.CourseRecipeChoices).HasForeignKey(crc => crc.MenuCourseId); 
     HasRequired(m => m.MenuCourse).WithMany(crc => crc.CourseRecipeChoices).HasForeignKey(crc => crc.SuggestedMenu_MenuCourseId); 
    } 
} 

navigasyon özellikleri için doğru sözdizimi ve CourseRecipeChoice için akıcı API sözdizimi için doğru sözdizimi nedir ... benim EntityTypeConfiguration sınıfta denedim ve açıkçası yanlış olan budur masaya katılmak ? aşağıdaki gibi
public class SuggestedMenu 
{ 
    public int SuggestedMenuId { get; set; } 

    public virtual ICollection<MenuCourse> MenuCourses { get; set; } 
} 

public class MenuCourse 
{ 
    public int Id { get; set; } 
    public int SuggestedMenuId { get; set; } 

    public SuggestedMenu SuggestedMenu { get; set; } 
    public virtual ICollection<CourseRecipeChoice> CourseRecipeChoices { get; set; } 
} 

public class CourseRecipeChoice 
{ 
    public int SuggestedMenuId { get; set; } 
    public int MenuCourseId { get; set; } 
    public int Id { get; set; } 
    public int RecipeId { get; set; } 

    //How do I represent the navigation properties in this class? 

} 

public class Recipe 
{ 
    public int RecipeId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 

    public ICollection<CourseRecipeChoice> CourseRecipeChoices { get; set; } 
} 

şifreler

şunlardır:

  • SuggestedMenu (Id)
  • MenuCourse (İd, SuggestedMenuId)
  • CourseRecipeChoice (İd, SuggestedMenuId, MenuCourseId, RecipeId) // aslında şaşkın olduğum yer çünkü modele göre, SuggestedMenuId önerilen bir PK trk ve eldeki bilgi dayalı MenuCourse ve CourseRecipeChoice bir PF (bu sadece kötü tasarım olabilir?)
  • Reçete (RecipeId)
+0

Sadece her tablonun anahtarlarının ne olduğunu ve yabancı anahtarların ne olduğunu söyler misiniz, tahmin ediyorum ama emin değilim. Bence daha büyük bir sorun olmamalı. – NSGaga

+0

@NSGaga Henüz cevabınızı okudum, ancak anahtarları eklemek için soruyu güncelledim ... – Robert

cevap

15

... (anahtarlar, ilişkiler tamamen net değildir) ,
burada en karmaşık senaryo olduğunu ve bence ne olabilir kapsamalıdır ...

public class SuggestedMenu 
{ 
    public int SuggestedMenuId { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<MenuCourse> MenuCourses { get; set; } 
    // public virtual ICollection<CourseRecipeChoice> CourseRecipeChoices { get; set; } 
} 
public class MenuCourse 
{ 
    public int MenuCourseId { get; set; } 
    public int SuggestedMenuId { get; set; } 
    public SuggestedMenu SuggestedMenu { get; set; } 
    public virtual ICollection<CourseRecipeChoice> CourseRecipeChoices { get; set; } 
} 
public class CourseRecipeChoice 
{ 
    public int CourseRecipeChoiceId { get; set; } 
    public int MenuCourseId { get; set; } 
    public int SuggestedMenuId { get; set; } 
    public int RecipeId { get; set; } 
    // no virtuals if required, non-optional 
    public Recipe Recipe { get; set; } 
    public MenuCourse MenuCourse { get; set; } 
    // public SuggestedMenu SuggestedMenu { get; set; } 
} 
public class Recipe 
{ 
    public int RecipeId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<CourseRecipeChoice> CourseRecipeChoices { get; set; } 
} 

... ve OnModelCreating içinde (aynı şey olsa, tüm yapılandırma orada yapılan tercih) ..

... ve test etmek için örn. Bir şey gibi ...

 using (var db = new YourDbContext()) 
     { 
      SuggestedMenu suggestedmenu = new SuggestedMenu { Description = "suggested menu" }; 
      var menucourse = new MenuCourse { MenuCourseId = 2, SuggestedMenu = suggestedmenu }; 
      var recipe = new Recipe { Name = "My recipe", Description = "recipe desc" }; 
      var crc = new CourseRecipeChoice { CourseRecipeChoiceId = 2, MenuCourse = menucourse, Recipe = recipe, }; 
      db.CourseRecipeChoices.Add(crc); 
      int recordsAffected = db.SaveChanges(); 
      foreach (var crcs in db.CourseRecipeChoices.Include(c => c.MenuCourse).Include(c => c.Recipe)) 
      { 
       Console.WriteLine("{0}, {1}, {2}, {3}", crcs.MenuCourse.MenuCourseId, crcs.MenuCourse.SuggestedMenuId, crcs.Recipe.Name, crcs.Recipe.Description); 
      } 
     } 
+0

Bunu bir atış yapacağım ve en kısa zamanda raporlayacağım. – Robert

+0

Mükemmel çalıştı! Bugün yeni bir şey öğrenmeme yardımcı olduğunuz için teşekkürler! – Robert

+0

np çözdüyseniz, cevabı işaretleyebilir/kapatabilirsiniz, en iyi – NSGaga

İlgili konular