EF:条件

时间:2015-08-11 20:19:17

标签: c# entity-framework

我有一个类型ContentEntry和一些继承它的类。其中一些类实现了一个需要属性ICollection<T> LanguageSpecificItems的接口。 T的类型取决于子类的类型。这些属性将映射到我的数据库中。这根本不是问题。

我的问题是我有一个ICollection<ContentEntry>作为另一个类的属性。但我需要获取LanguageSpecificItems子列表(如果存在)以使用ContentEntry的抽象方法进行某些操作。如果我在.Include上拨打DbSet<MyOtherClass>,则无效。

MyDbSet.Include("LanguageSpecificItems")...
  

指定的包含路径无效。 EntityType'Koopakiller.Website.Model.ContentEntry'不声明名为'LanguageSpecificItems'的导航属性。

但它存在于一些继承的类中,如果它不存在,我不需要它。

我该如何解决这个问题?

更新:代码

这是我的`DbContext:

的一部分
public partial class CommonDbModel : DbContext
{
    public CommonDbModel() : base("DefaultConnection") { }
    public DbSet<Account> Accounts { get; set; }

帐户的属性为ContentEntry s:

public class Account : IUser<Guid>
{
    public virtual ICollection<ContentEntry> CommentEmailSubscriptions { get; set; }

ContentEntry为订阅添加了一个Àccount`集合:

public abstract class ContentEntry : ISearchResult
{
    public virtual ICollection<Account> CommentEmailSubscriptions { get; set; }

    public abstract LocalizedSearchResult GetLocalizedPart();

GetLocalizedPart在子类中实现,如果类实现了接口,则在某些情况下访问LanguageSpecificItems属性:

public class BlogEntry : ContentEntry, ILanguageSpecificContainer<BlogEntryLS>
{
    public ICollection<BlogEntryLS> LanguageSpecificItems { get; set; }

所以,我访问Account项目并想要致电GetLocalizedPart。 e.g:

db.Account.Include("CommentEmailAbonnements")
          .Include("CommentEmailAbonnements.LanguageSpecificItems")
          .FirstOrDefault(x=>x.Id = ...)
          .CommentEmailAbonnements.FirstOrDefault()
          .GetLocalizedPart();

0 个答案:

没有答案