2017-09-06 2 views
2

Ich habe viele Entitäten. Einer von ihnen Entity verwenden ein paar Beziehungen. Es ist eine Beziehung zu . Wenn ich Klasse aus dem Zusammenhang bekomme, kann ich Rekord mit Lazy Load bekommen. Aber wenn ich OrderLine Klasse aus Kontext AccountTransaction Navigationseigenschaft ist null. Wie kann ich dieses Problem lösen?Entity Framework Optionale Eins-zu-Eins-Beziehung funktioniert nicht

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. 

Antwort

0

Sie missbrauchen [ForeignKey]. Es wird verwendet, um das Schlüsselfeld für eine Beziehung aus dem untergeordneten Datensatz anzugeben, in diesem Fall wäre dies die . Versuchen Sie, Ihr Modell zu den folgenden zu ändern:

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; }   
} 

Lassen Sie mich wissen, wenn es funktioniert oder wenn Sie auf andere Probleme stoßen. :)

+0

Ich habe versucht, aber ich erhebe diese Ausnahme. AccountTransaction_OrderLine_Source:: Die Multiplizität ist in der Rolle 'AccountTransaction_OrderLine_Source' in der Beziehung 'AccountTransaction_OrderLine' nicht gültig. Da die abhängigen Rolleneigenschaften nicht die Schlüsseleigenschaften sind, muss die obere Grenze der Multiplizität der abhängigen Rolle '*' sein. – Yargicx

+0

Richtig, weil diese Struktur nicht einem normalen 1: 1-Muster folgt, sondern einer 1: vielen. Versuchen Sie, '[Index (IsUnique = true)]' zu 'AccountTransaction.OrderLineId' hinzuzufügen, um zu sehen, ob das Problem dadurch behoben wird. Ich werde meine Antwort auch bearbeiten. – CptRobby

+0

Ich bin mir fast sicher, dass die 1: 1-Beziehung direkt durch den Schlüssel beider Entitäten erfolgen muss, nicht mit einer zusätzlichen Eigenschaft. Versuchen Sie, das [Key] -Attribut auf OrderLineId zu verschieben und den Typ in int zu ändern (da dieser Wert nicht Nullable sein kann) – Miguel

Verwandte Themen