EntityFrameworkCore使用多态关联填充属性

时间:2017-06-01 14:49:04

标签: c# entity-framework

我有一个表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;

0 个答案:

没有答案