我试图创建一个博客,所以每个帖子都有一些主题,反之亦然(多对多关系)。我创建了两个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
解决方案创建数据库。
有没有解决此问题的解决方法?