我经常有以下结构:
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对它有所了解,但它似乎没有提供说“不要生成一个。”的方法。
答案 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; }
}