UserId
列を追加したい既存のテーブルProjects
があります。UserId
は外部キーです。 Projects
は現在、名前のリストを持っていますが、私は各ユーザが自分のプロジェクトを管理したいと考えています。私はそれらを手動できれいにすることができるくらいリストが小さいので、最初は "孤児"を持つことでOKです。私はUserId
とナビゲーションプロパティUser
含めるように私のモデルを更新したEFコアに外部キー列を追加
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; }
}
(ここではおそらく関係ありませんが、Entity
はId
とDateModified
と基底クラスである)そして、私の関連するマッピングファイルは
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
エンティティにナビゲーションプロパティを追加しましたが、マッピングclを変更しませんでしたお尻。
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);
}
更新データベース
ALTER TABLE [Projects] ADD CONSTRAINT [FK_Projects_Users_UserId] FOREIGN KEY ([UserId]) REFERENCES [Users] ([Id]) ON DELETE SET NULL;
を実行しているときに、このSQLに変換し、このエラーに
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それでした。ありがとうございました。私はそれを逃したとは思えません。あなたは疲れていません。それを回答として追加することができますか?これを答えることができますか? – Joe