0

我经常有以下结构:

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 给我的是第一个属性上的正常一对多,FK 从 Version 到 MyClass,但是第二个属性上的完全一对一关系,FK 指向两个方向 -所以 Version 的底层架构以 MyClass_Id 和 MyClass_Id1 结束。

那么,有没有一种方法可以在不借助 Fluent API 的情况下在 EF Code First 中获得单向关系?看起来可能 System.ComponentModel.DataAnnotations.Schema.InverseProperty 尝试了它,但它似乎没有提供一种方式来说“不要生成一个”。

4

1 回答 1

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; }
}
于 2013-03-30T09:42:06.097 回答