2016-07-01 6 views
0
[DataContract] 
public class Match 
{ 
    [DataMember] 
    public Guid Id { get; set; } 

    public virtual Tour Tour { get; set; } 

    [DataMember] 
    public DateTime DateMatch { get; set; } 


    public virtual Team Home { get; set; } 

    public virtual Team Guest { get; set; } 

    public virtual Result Result { get; set; } 
} 

[DataContract] 
public class Result 
{ 
    [DataMember] 
    public Guid Id { get; set; } 

    public virtual Match Match { get; set; } 
    public virtual List<Goal> Goals { get; set; } 

} 

J'ai essayé de le faire dans Entity Framework quand je suis arrivé l'erreur:Impossible de déterminer la fin principale d'une association entre les types dans Entity Framework

Unable to determine the principal end of an association between the types 'OperationWithTeams.Result' and 'OperationWithTeams.Match'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.

+0

mais si suppression virtuel public Résultat de résultat {get ; ensemble; } working – Venedchuk

+0

Si vous utilisez des annotations de données, ajoutez-les à votre classe 'Match': ' [ForeignKey ("Résultat")] public Guid? ResultId {get; ensemble; } ' Et à votre classe' Result', ajoutez ce qui suit: '[ForeignKey (" Match ")] public Guid MatchId {get; ensemble; } ' Cela permet à une correspondance d'avoir aucun résultat (NULL), si vous ne voulez pas permettre cela, rendre le' ResultId' non-nullable en supprimant le point d'interrogation (?). –

Répondre

0

Parce que votre modèle définit une référence circulaire entre Match et Result, vous devez définir le comportement que vous souhaitez explicitement dans ModelBuilder.

En supposant qu'un résultat ne peut exister sans un match, mais un match peut exister sans résultat, faire correspondre le principal et Résultat de la charge:

ModelBuilder.Entity<Match>().HasOptional(m => m.Result).WithRequired(r => r.Match);