【发布时间】:2017-12-15 01:43:05
【问题描述】:
我有一个现有的表Projects,我想向其中添加一个UserId 列,其中UserId 是一个外键。 Projects 现在有一个名称列表,但我希望每个用户管理她自己的项目。最初我可以接受“孤儿”,因为列表足够小,我可以手动清理它们。
我已经更新了我的模型以包含UserId 和导航属性User(可能不相关,但Entity 这里是Id 和DateModified 的基类)
public class Project : Entity
{
public string Name { get; set; }
public Guid? UserId { get; set; } //tried this as nullable and non nullable
public User User { get; set; }
}
而我的相关映射文件是
public class ProjectMap : IEntityTypeConfiguration<Project>
{
public void Configure(EntityTypeBuilder<Project> builder)
{
builder.Property(x => x.Name).IsRequired();
builder.Property(x => x.UserId).IsRequired();
builder.HasOne(x => x.User)
.WithMany(x => x.Projects)
.HasForeignKey(x => x.UserId)
.OnDelete(DeleteBehavior.SetNull); //I have tried numerous combinations of things here....
}
}
我还为项目的User 实体添加了一个导航属性,但没有对映射类进行任何更改。
public class User : Entity
{
public string EmailAddress { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Task> Tasks { get; set; }
public List<Project> Projects { get; set; }
}
由此产生的迁移:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<Guid>(
name: "UserId",
table: "Projects",
nullable: false,
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
migrationBuilder.CreateIndex(
name: "IX_Projects_UserId",
table: "Projects",
column: "UserId");
migrationBuilder.AddForeignKey(
name: "FK_Projects_Users_UserId",
table: "Projects",
column: "UserId",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.SetNull);
}
在运行 update-database 时转换为这条 SQL
ALTER TABLE [Projects] ADD CONSTRAINT [FK_Projects_Users_UserId] FOREIGN KEY ([UserId]) REFERENCES [Users] ([Id]) ON DELETE SET NULL;
并因此错误而失败
Cannot create the foreign key "FK_Projects_Users_UserId" with the SET NULL referential action, because one or more referencing columns are not nullable.
我做错了什么?
【问题讨论】:
-
@HaraldCoppoolse 就是这样。非常感谢你..我不敢相信我错过了。你编码不累!您能否将其添加为答案,以便我将其标记为已回答?
标签: entity-framework entity-framework-migrations ef-core-2.0