2017-09-06 119 views
2

我有很多實體。其中一個OrderLine實體使用了幾個關係。這與AccountTransaction有關係。當我從上下文中得到AccountTransaction類時,我可以通過延遲加載獲得OrderLine記錄。但是,當我從AccountTransaction導航屬性爲空時得到OrderLine類。 我該如何解決這個問題?實體框架可選一對一關係不起作用

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. 

回答

0

你濫用[ForeignKey]。它用於指定子記錄中關係的關鍵字段,在這種情況下,該記錄將是AccountTransaction。嘗試將您的模型更改爲以下內容:

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

讓我知道它是否有效,或者是否遇到其他問題。 :)

+0

我試過了,但我提出這個例外。 AccountTransaction_OrderLine_Source::多重性在關係「AccountTransaction_OrderLine」中的角色「AccountTransaction_OrderLine_Source」中無效。因爲依賴角色屬性不是關鍵屬性,所以依賴角色的多重性的上界必須是'*' – Yargicx

+0

正確,因爲此結構不遵循正常的1:1模式,而是1:多。嘗試添加'[Index(IsUnique = true)]'到'AccountTransaction.OrderLineId'來查看是否可以修復它。我也會編輯我的答案。 – CptRobby

+0

我幾乎可以肯定,1:1關係需要直接通過兩個實體的關鍵而沒有附加屬性。嘗試將[Key]屬性移動到OrderLineId並將類型更改爲int(因爲此值不能爲空) – Miguel