2017-09-06 4 views
2

J'ai beaucoup d'entité. L'une d'entre elles utilise quelques relations. C'est par rapport à AccountTransaction. Quand je reçois la classe AccountTransaction du contexte, je peux obtenir OrderLine enregistrer avec la charge paresseuse. Mais quand j'obtiens la classe OrderLine du contexte AccountTransaction la propriété de navigation est nulle. Comment puis-je résoudre ce problème?Entity Framework Facultatif Une relation à un ne fonctionne pas

public partial class OrderLine : Base 
{ 

    [Key, ForeignKey("AccountTransaction")] 
    public int OrderLineId { get; set; } 

    public virtual AccountTransaction AccountTransaction { get; set; } 
} 

public class AccountTransaction 
{ 
    [Key] 
    public int TransactionId { get; set; } 

    [ForeignKey("OrderLine")] 
    public int? OrderLineId { get; set; } 

    public virtual OrderLine OrderLine { get; set; }   
} 


var orderLine = context.OrderLines.Find(167069); 
var accTransaction = context.AccountTransactions.Find(38770); 


//orderLine.AccountTransaction; //here account transaction is null 
//accTransaction.OrderLine;//here orderLine is not null. 

Répondre

0

Vous utilisez abusivement [ForeignKey]. Il est utilisé pour spécifier le champ clé pour une relation de l'enregistrement enfant, qui dans ce cas serait le AccountTransaction. Essayez de remplacer votre modèle par le suivant:

public partial class OrderLine : Base 
{ 

    [Key] 
    public int OrderLineId { get; set; } 

    public virtual AccountTransaction AccountTransaction { get; set; } 
} 

public class AccountTransaction 
{ 
    [Key] 
    public int TransactionId { get; set; } 

    [Index(IsUnique=true)] 
    public int? OrderLineId { get; set; } 

    [ForeignKey("OrderLineId")] 
    public virtual OrderLine OrderLine { get; set; }   
} 

Faites-moi savoir si cela fonctionne ou si vous rencontrez d'autres problèmes. :)

+0

J'ai essayé mais je soulève cette exception. AccountTransaction_OrderLine_Source:: La multiplicité n'est pas valide dans le rôle 'AccountTransaction_OrderLine_Source' dans la relation 'AccountTransaction_OrderLine'. Parce que les propriétés du rôle dépendant ne sont pas les propriétés clés, la limite supérieure de la multiplicité du rôle dépendant doit être '*' – Yargicx

+0

Droit, car cette structure ne suit pas un modèle 1: 1 normal, mais un 1: plusieurs. Essayez d'ajouter '[Index (IsUnique = true)]' à 'AccountTransaction.OrderLineId' pour voir si cela va le réparer. Je vais aussi éditer ma réponse. – CptRobby

+0

Je suis presque sûr que la relation 1: 1 doit être directe à travers la clé des deux entités et non avec une propriété supplémentaire. Essayez de déplacer l'attribut [Key] à OrderLineId et changez le type en int (car cette valeur ne peut pas être nulle) – Miguel