我有一个类似于example中的数据库的数据库。不是学生课程的情况,而是有两个与这两个表相关的共同第三个表。
我的案例是,Items,PerformanceGraphItems和PerformanceGraphSeries。
每个项目可以有多个GraphItems,GraphItem属于GraphSeries行。我如何在Entity Framework中对其进行建模,以便能够访问属于Item的GraphSeries?
像这样。
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<PerformanceGraphItem> PerformanceGraphItems { get; set; }
public virtual ICollection<PerformanceGraphSeries> PerformanceGraphSeries { get; set; }
}
public class PerformanceGraphItem
{
[Key]
public int Id { get; set; }
[ForeignKey("Item")]
public int ItemId { get; set; }
public int SeriesId { get; set; }
public short Year { get; set; }
public double RateOfReturn { get; set; }
public virtual Item Item { get; set; }
[ForeignKey("SeriesId")]
public virtual PerformanceGraphSeries PerformanceGraphSeries { get; set; }
}
public class PerformanceGraphSeries
{
public int id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<PerformanceGraphItem> PerformanceGraphItems { get; set; }
}
答案 0 :(得分:2)
在我看来,你拥有的东西非常接近你想要的东西,尽管我会改变你的
public virtual ICollection<PerformanceGraphSeries> PerformanceGraphSeries { get; set; }
代替
行public virtual IEnumerable<PerformanceGraphSeries> PerformanceGraphSeries
{
get
{
return PerformanceGraphItems.Select(pgi => pgi.PerformanceGraphSeries);
}
}
或
public virtual IEnumerable<PerformanceGraphSeries> PerformanceGraphSeries
{
get
{
return PerformanceGraphItems.Select(pgi => pgi.PerformanceGraphSeries)
.Distinct();
}
}
取决于您的情况。
Thius是因为您并没有真正建模在Item
和PerformanceGraphSeries
之间直接连接的数据库 - 所以您不希望以这种方式生成数据库。但是这仍然允许您在一个属性中访问它(而不是在任何地方都进行查询)。
此外,由于您在大多数地方使用virtual
,我认为您正在尝试使用代理对象 - 请确保将所有属性设置为虚拟,否则不会发生。