EF Code First - id被映射为FK

时间:2014-03-13 09:28:09

标签: c# entity-framework ef-code-first entity-framework-6

假设我有一篇文章和一篇FeatureArticle,其中一篇FeatureArticle指向文章本身,一个订单,以及它自己的Id。现在EF只是将Id设置为文章的Id。无论出于何种原因,这意味着我无法添加多个FeatureArticle(指向不同的文章)。

配置如下:

public sealed class FeatureArticleMap : EntityTypeConfiguration<FeatureArticle>
{
    public FeatureArticleMap()
    {
        HasKey(o => o.Id);
        Property(o => o.Order).IsRequired();
        HasRequired(o => o.Article).WithRequiredPrincipal().WillCascadeOnDelete();
    }
}

public sealed class ArticleMap : EntityTypeConfiguration<Article>
{
    public ArticleMap()
    {
        HasKey(o => o.Id);

        Property(o => o.Name).IsRequired().HasMaxLength(255);
        Property(o => o.Content).IsRequired();
    }
}

然后EF正在写条目(id为5来证明这一点):

Article:
Id: 5, Name: "Some Article", Content: "Blah"
FeatureArticle:
Id: 5, Order: 0, ArticleId: 0

我期望ArticleId为5.好的是EF回归了我的期望,但之后它被打破了,因为我无法添加多个FeatureArticle,我怀疑它&# 39;与它的映射方式有关。

1 个答案:

答案 0 :(得分:0)

在我的表的类似情况下,表中有一个单独的FK-ID,FK定义不同。我不知道下面显示的这个FK定义是否符合您的需求。

结合您的代码,它看起来像是 机型:

public partial class FeatureArticle
{
    public int Id { get; set; }
    public int Order { get; set; }
    public int ArticleId { get; set; }
    public virtual Article Article { get; set; }
}

public partial class Article
{
    public Article()
    {
        this.FeatureArticles = new List<FeatureArticle>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Content { get; set; }
    public virtual ICollection<FeatureArticle> FeatureArticles { get; set; }
}

映射:

public sealed class FeatureArticleMap : EntityTypeConfiguration<FeatureArticle>
{
    public FeatureArticleMap()
    {
        // Primary Key
        HasKey(o => o.Id);

        // Properties
        Property(o => o.Order).IsRequired();

        // Table & Column Mappings
        ToTable("FeatureArticle");
        Property(o => o.Id).HasColumnName("Id");
        Property(o => o.Order).HasColumnName("Order");
        Property(o => o.ArticleId).HasColumnName("ArticleId");

        // Relationships
        HasRequired(o => o.Article)
            .WithMany(o => o.FeatureArticles)
            .HasForeignKey(d => d.ArticleId);
    }
}

public sealed class ArticleMap : EntityTypeConfiguration<Article>
{
    public ArticleMap()
    {
        // Primary Key
        HasKey(o => o.Id);

        // Properties
        Property(o => o.Name).IsRequired().HasMaxLength(255);
        Property(o => o.Content).IsRequired();

        // Table & Column Mappings
        ToTable("Article");
        Property(o => o.Name).HasColumnName("Name");
        Property(o => o.Content).HasColumnName("Content");
    }
}

我需要提一下,我在我的表中使用的这个FK约束是用EF设计器建模的,然后先用Entity Framework Power Tools Beta 4转换为代码。