假设我有一篇文章和一篇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;与它的映射方式有关。
答案 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转换为代码。