2013-01-14 63 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可能最适合自己的问题 –