EF码第一id被映射为FK
本文关键字:映射 FK id EF | 更新日期: 2023-09-27 17:50:05
假设我有一个Article和一个FeatureArticle,其中FeatureArticle指向Article本身、Order和它自己的Id。现在EF只是简单地将Id设置为文章的Id。不管出于什么原因,这意味着我不能添加多个FeatureArticles(指向不同的文章)。
配置如下:
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
我期望的文章id是5。好的事情是EF返回我所期望的,但后来它被打破了,因为我不能添加多个FeatureArticle,我怀疑这与它映射Id的方式有关。
在类似的情况下,我的表中有一个单独的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设计器建模的,然后首先用实体框架电动工具Beta 4转换为代码。