2013-01-14 40 views
0

我經常有以下結構:EF代碼優先:1,到一個單向關係

MyClass 
public virtual ICollection<Version> Versions { get; set; } 
public virtual Version CurrentVersion { get; set; } 

也就是說,存在的東西的清單,有的班級都指向列表,該列表中的一個特定項目 - 許多版本的當前版本,事件列表中的下一個即將發生的事件等。

在我的模式中,我想最終得到的是一個指向版本的外鍵到MyClass - 很多工作正常。但是後來我想要一個外鍵從MyClass指向代表CurrentVersion屬性的Version,並且沒有外鍵返回 - 我不想額外存儲或者告訴版本什麼是MyClass,它是CurrentVersion(如果有的話)。換句話說,我希望這種第二種關係從MyClass到Version是單向的,即使它是一對一的。

EF Code First給我的第一個屬性是正常的一對多,FK從Version到MyClass,但是第二個屬性具有FK指向的完全一對一關係在兩個方向上 - 所以Version的底層模式以MyClass_Id和MyClass_Id1結束。

那麼,有沒有辦法在EF Code First中獲得單向關係而無需使用Fluent API?它看起來可能是System.ComponentModel.DataAnnotations.Schema.InverseProperty有一個鏡頭,但它似乎沒有提供一種方式來說「不要生成一個」。

回答

0

關鍵是在指向屬性的InverseProperty指向,以便EF實現它的多對多,而不是一對一。

public class MyClass 
{ 
    public int Id { get; set; } 

    public Version CurrentVersion { get; set; } 

    public ICollection<Version> Versions { get; set; } 
} 

public class Version 
{ 
    public int Id { get; set; } 

    [InverseProperty("Versions")] 
    public Versioned Versioned { get; set; } 
} 
+0

你能告訴我如何用流利的api來做到這一點嗎? –

+0

@ahmadalishafiee可能最適合自己的問題 –