EF代码优先:一对一的单向关系

时间:2013-01-14 08:51:25

标签: ef-code-first

我经常有以下结构:

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

也就是说,有一个东西列表,有些类都指向该列表,并且该列表中有一个特定项目 - 许多版本的当前版本,事件列表中的下一个即将发生的事件等。

在我的架构中,我最终想要的是一个从Version指向MyClass的外键 - 这很有效。但后来我想从MyClass指向一个外键,代表CurrentVersion属性的版本,没有外键指向后面 - 我不想要额外的存储或打扰告诉版本什么是MyClass它是CurrentVersion,如果有的话。换句话说,我希望第二种关系是从MyClass到Version的单向关系,即使它是一对一的。

EF Code First给我的是第一个属性上的正常一对多,从版本到MyClass的FK,然后在第二个属性上有一个完整的一对一关系,FK指向两个方向 - 因此版本的基础架构以MyClass_Id和MyClass_Id1结束。

那么,有没有办法在不使用Fluent API的情况下在EF Code First中获得单向关系?看起来好像System.ComponentModel.DataAnnotations.Schema.InverseProperty对它有所了解,但它似乎没有提供说“不要生成一个。”的方法。

1 个答案:

答案 0 :(得分: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; }
}
相关问题