将关联属性与实体框架一起使用

时间:2016-01-14 18:43:08

标签: c# entity-framework entity-framework-6

我只是建立一个模型,其中包含他们所属的新闻文章和主题。这是一个简单的关联,但现在它有点“扩展”。其中一个主题关联可以标记为“mainTopic”。

我已经设置了3个表:

  • avsn_content,其中包含id

  • 标识的新闻文章
  • avsn_content_topics,包含关联,包含assocIdidtopicId和指示mainTopic

    的列
  • avsn_topics,其中包含由topicId

  • 标识的主题

此外,我有这三个表的模型。我的关联模型设计如下:

[Table("avsn_content_topcis")]
public class TopicNewsModel
{
    [Key]
    [Column("assocId")]
    public int Id { get; set; }

    public NewsArticleModel NewsArticle { get; set; }

    public TopicModel Topic { get; set; }

    [Column("mainTopic")]
    public bool IsMainTopic { get; set; }
}

我的关系设置如下:

modelBuilder.Entity<NewsArticleModel>()
                    .HasMany(x => x.Topics)                        
                    .WithMany()
                    .Map(m => m.MapLeftKey("id")
                               .MapRightKey("topicId")
                               .ToTable("avsn_content_topics"));

我收到此错误:

  

在模型生成期间检测到一个或多个验证错误:

     

NewsArticleModelTopicNewsModel:Name:EntitySet   'NewsArticleModelTopicNewsModel'与架构'dbo'和表   'avsn_content_topics'已经定义。每个EntitySet都必须引用   到一个独特的架构和表格。

删除ToTable选项对它没有帮助,所以我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

嗯,发布后立即找到答案。试图从绳索的另一端挑选问题表明我必须从TopicNewsModel开始,而不是从NewsModel开始。

  modelBuilder.Entity<TopicNewsModel>()
                    .HasRequired(topicNews => topicNews.NewsArticle)
                    .WithMany(news => news.Topics)
                    .Map(m => m.MapKey("id"));

        modelBuilder.Entity<TopicNewsModel>()
                    .HasRequired(topicNews => topicNews.Topic)
                    .WithMany()
                    .Map(m => m.MapKey("topicId"));