为什么ICollection <post>没有实现IEnumerable <ipost>?

时间:2016-08-23 13:13:46

标签: c# asp.net-mvc interface ef-code-first many-to-many

我试图创建一个博客,所以每个帖子都有一些主题,反之亦然(多对多关系)。我创建了两个Interface和两个Class es,我想使用EF Code First解决方案创建数据库。这是我的代码:

// interfaces

public interface IPost
{
    int id { get; set; }

    string name { get; set; }

    IEnumerable<ITopic> topics { get; set; }
}

public interface ITopic
{
    int id { get; set; }

    string name { get; set; }

    IEnumerable<IPost> posts { get; set; }
}

// classes

public class Post : IPost
{
    public int id { get; set; }

    public string name { get; set; }

    // ... (other properties)

    public virtual ICollection<Topic> topics { get; set; }
}

public class Topic : ITopic
{
    int id { get; set; }

    string name { get; set; }

    // ... (other properties)

    public virtual ICollection<Post> posts { get; set; }
}

但是我收到以下错误:

'Topic' does not implement interface member 'ITopic.posts'. 'Topic.posts' cannot implement 'ITopic.posts' because it does not have the matching return type of 'IEnumerable<IPost>'.

而且,我得到Post的(几乎)相同的错误。

我知道ICollection<T>实现了IEnumerable<T>接口。并且,如您所见,Post实现了IPost。那么,为什么我会收到这个错误?我也尝试了这些(whitin Topic类):

1- public virtual ICollection<IPost> posts { get; set; }

2- public virtual IEnumerable<Post> posts { get; set; }(为什么这一剂不起作用?!)

唯一有效的代码是public virtual IEnumerable<IPost> posts { get; set; },但在枚举Post时,我将丢失topic.posts的其他属性。更糟糕的是,我无法使用EF Code First解决方案创建数据库。

有没有解决此问题的解决方法?

0 个答案:

没有答案