2012-07-28 3 views
4

J'utilise le code d'abord et EF 4.1 im mon application MVC3 et ont deux modèles qui ont deux relations
entre eux. Voici les classes qui se réfère à ces modèles:Relations multiples entre deux modèles

public class Cattle 
    { 
     public int CattleID { get; set; } 
     public int FarmID { get; set; } 
     public int SituationID { get; set; } 
     public int DiscardID { get; set; } 
     public int Stamp { get; set; } 
     public string Sex { get; set; } 
     public string Condition { get; set; } 
     public virtual Farm Farm { get; set; } 
     [InverseProperty("Cattles2")] 
     public virtual ICollection<Farm> Farms { get; set; } 
    } 

public class Farm 
{ 
    public int FarmID { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Cattle> Cattles { get; set; } 
    public virtual ICollection<Cattle> Cattles2 { get; set; } 
} 

Une relation est une à une ou plusieurs causer un catle ne peut être dans une ferme et une ferme peut contenir beaucoup catles. Une autre relation est de plusieurs à plusieurs qu'un transfert peut être transféré entre les fermes et je générerais une troisième table pour stocker les transferts en utilisant l'API Fluent. Je voudrais également insérer une propriété de date à la nouvelle table et ne pas savoir comment faire it.Here est le code dans la FarmContext dans la méthode de OnModelCreating:

 modelBuilder.Entity<Catle>() 
     .HasMany(c => c.Farms).WithMany(i => i.Catles) 
     .Map(t => t.MapLeftKey("CatleID") 
      .MapRightKey("FarmID") 
      .ToTable("CatleTransfer")); 

Quand je construis le projet, il semble fonctionne bien et les tables générées Catle et Farm sont alimentées par le FarmInitializer mais certaines informations qui pointent vers cette relation sont manquantes dans la page d'index de Catle. il apparaît en blanc pour moi. Voici le code qui obtient les informations:

@Html.DisplayFor(modelItem => item.Farm.Name) 

je besoin Savoir ce que je fais mal ou s'il existe une méthode plus appropriée pour résoudre cette question.

+0

Est-ce que 'Farm' est rempli ou est-il nul? Est-ce que 'FarmID' est correctement rempli? Comment les informations sur la nouvelle propriété Date sont-elles liées au problème? –

+0

oui, la table de la ferme sont correctement peuplés et la table catle aussi. Le FarmID est rempli dans les deux tables. La propriété Date stocke la date du transfert d'un chat de sa batterie vers la nouvelle batterie. J'espère que j'ai aidé. –

+0

Désolé, je demandais au sujet du code .NET pas sur la base de données. –

Répondre

0

Vous devrez peut-être être spécifique à propos de la relation lorsque vous traitez plusieurs jointures. Essayez d'ajouter un attribut Clé étrangère à votre propriété de navigation Ferme.

[ForeignKey("FarmID")] 
public virtual Farm Farm { get; set; } 
+0

Désolé, mais ça n'a pas marché. Affiche l'erreur suivante: "La relation référentielle entraînera une référence cyclique non autorisée" –

+0

Vous devriez être capable d'arrêter les cycles ou les multiples chemins en cascade en autorisant les NULL pour FarmId (public int? FarmID {get; set;}) ou désactiver la cascade pour la relation avec modelBuilder. – ckal

+0

Ok, j'ai mis la propriété FarmID comme nullable et ça a bien fonctionné, THX beaucoup. Et qu'en est-il de générer la propriété Date à la nouvelle table "CatleTransfer" affichée dans le code ... Pourriez-vous m'aider? –

Questions connexes