我有一个表Venue
,其上可以有多个Media
个项目。媒体可以用于任意数量的不同表格,因此我们有2个属性,MediaType
用于指定它(内容,地点,场地类别,联系人)和MediaTypeID
的表格。指定该表中的哪个项目。
当我们加载场地时,我们如何填充myVenue.Media?
我们有以下似乎很接近......
MyDBContext.cs:
builder.Entity<Venue>()
.HasMany<Media>(x => x.Medias)
.WithOne(m => m.Venue)
.HasForeignKey(m => m.MediaTypeID);
Media.cs看起来像:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int MediaID { get; set; }
public string URL { get; set; }
public int MediaType { get; set; }
public int MediaTypeID { get; set; }
public Venue Venue { get; set; }
Venue.cs有:
public virtual ICollection<Media> Medias { get; set; }
然后使用我们正在使用的代码:
db.Venue.Include(x => x.Medias)
这个问题是它没有在媒体的MediaType属性上进行比较,所以如果它们具有相同的ID,我们最终可能会接收Contact或Venue Media。
我们可以在每.Where()
之后在.Include
中进行比较,但似乎肯定有办法在DBContext中只执行一次这样的操作吗?
总结一下,我的理想用法是指定:
builder.Entity<Venue>()
.HasMany<Media>(x => x.Medias)
.WithOne(m => m.Venue)
.HasForeignKey(m => m.MediaTypeID && m.MediaType==2);
更新 从评论中的反馈来看,这似乎是不可能的,因为EF&#34;仅支持可以由db FK关系表达的关联。 - Ivan Stoev&#34;