【发布时间】:2021-08-02 13:09:35
【问题描述】:
当我尝试创建迁移时,EF 不断添加影子属性,例如 AgencyId、AgencyId1、AgencyId2。我认为问题出在我的配置中,但我尝试了几种方法,但都没有奏效
生成类似的东西:
migrationBuilder.CreateTable(
name: "Packages",
columns: table => new
{
AgencyId1 = table.Column<int>(type: "int", nullable: true),
AgencyId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Packages", x => x.Id);
table.ForeignKey(
name: "FK_Packages_Agencies_AgencyId",
column: x => x.AgencyId,
principalTable: "Agencies",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Packages_Agencies_AgencyId1",
column: x => x.AgencyId1,
principalTable: "Agencies",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
包装:
public class Package : PackageModel
{
public int AgencyId { get; set; }
public virtual Agency Agency { get; set; }
...
(也试过不使用 virtual 关键字)
机构配置
internal class AgencyConfiguration : IEntityTypeConfiguration<Agency>
{
public void Configure(EntityTypeBuilder<Agency> builder)
{
builder.HasKey(x => x.Id);
builder.Property(x => x.Id)
.IsRequired()
.ValueGeneratedOnAdd();
builder.Property(x => x.Name)
.IsRequired()
.HasMaxLength(250);
builder.HasMany(x => x.Packages)
.WithOne()
.HasForeignKey(x => x.AgencyId)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
}
}
包配置
internal class PackageConfiguration : IEntityTypeConfiguration<Package>
{
public void Configure(EntityTypeBuilder<Package> builder)
{
builder.HasKey(x => x.Id);
builder.Property(x => x.Id)
.IsRequired()
.ValueGeneratedOnAdd();
builder.HasOne(x => x.Agency)
.WithMany()
.HasForeignKey(x => x.AgencyId)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
}
}
(也尝试在 Package 端不重复配置,仅在代理端 - 效果不佳)
没有重复的同名列,没有重复的配置文件或类似的东西。
正在 CoreDbContext 中应用配置:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new AgencyConfiguration());
modelBuilder.ApplyConfiguration(new PackageConfiguration());
有什么想法吗? 谢谢
【问题讨论】:
-
PackageModel 中是否有添加其他属性的内容?
-
@Neil 不,只有 Name 和 Description 属性
-
是否有另一个表引用了这个表?
标签: c# .net entity-framework entity-framework-core