【发布时间】:2020-10-20 09:30:30
【问题描述】:
我正在与 ef 一起从事 .net 核心项目。 我有两张桌子:
public class Asset
{
[Key]
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
// Relationships
public ICollection<AssetMixRecord> AssetMixRecords { get; set; }
}
public class AssetMixRecord
{
public decimal Percentage { get; set; }
public Guid AssetId { get; set; }
// Relationships
public Guid ParentAssetId { get; set; }
}
上下文如下所示:
modelBuilder.Entity<Asset>()
.HasMany(a => a.AssetMixRecords)
.WithOne()
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<AssetMixRecord>()
.HasKey(c => new { c.ParentAssetId, c.AssetId })
.IsClustered();
此迁移代码如下所示:
migrationBuilder.CreateTable(
name: "AssetMixRecords",
columns: table => new
{
AssetId = table.Column<Guid>(nullable: false),
ParentAssetId = table.Column<Guid>(nullable: false),
Percentage = table.Column<decimal>(type: "decimal(8,7)", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AssetMixRecords", x => new { x.ParentAssetId, x.AssetId })
.Annotation("SqlServer:Clustered", true);
table.ForeignKey(
name: "FK_AssetMixRecords_Assets_AssetId",
column: x => x.AssetId,
principalTable: "Assets",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
这一切都很好。但是“ParentAssetId”也是“Assets.Id”的外键。
我们的用例如下所示:
var asset1 = new Asset();
var asset2 = new Asset();
dbContext.Add(asset1);
dbContext.Add(asset2);
dbContext.SaveChanges();
var asset3 = new Asset();
asset3.AssetMixRecords.Add(new AssetMixRecord()
{
AssetId = asset1.Id,
ParentAssetId = asset3.Id
});
asset3.AssetMixRecords.Add(new AssetMixRecord()
{
AssetId = asset2.Id,
ParentAssetId = asset3.Id
});
dbContext.Add(asset3);
dbContext.SaveChanges();
我无法将第二个外键放入迁移代码中。我应该手动添加吗?
感谢和问候
S.
【问题讨论】:
标签: .net-core entity-framework-core entity-framework-core-migrations