UserId
열을 추가하려는 기존 테이블이 Projects
인데, UserId
은 외래 키입니다. Projects
지금은 이름 목록이 있지만 각 사용자가 자신의 프로젝트를 관리하고 싶습니다. 나는 목록을 수동으로 정리할 수있을 정도로 목록이 작아서 처음에는 "고아"를 갖는 것이 좋습니다. 내가 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; }
}
마이그레이션 :
이 오류Cannot create the foreign key "FK_Projects_Users_UserId" with the SET NULL referential action, because one or more referencing columns are not nullable.
ALTER TABLE [Projects] ADD CONSTRAINT [FK_Projects_Users_UserId] FOREIGN KEY ([UserId]) REFERENCES [Users] ([Id]) ON DELETE SET NULL;
를 실행할 때이 SQL로 변환 그리고 실패
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);
}
내가 뭘 잘못하고 있니?
당신이 원하기 때문에 아래Project
또한
builder.Property(x => x.UserId).IsRequired();
에 null 허용 FK를 문제의 원인이되는 라인은, 생성 된 마이그레이션이 이미 힌트를 가지고
@HaraldCoppoolse 그게 전부입니다. 고맙습니다. 나는 그걸 놓쳤다는 것을 믿을 수 없습니다. 너는 피곤하지 않을 것이다!그걸 답으로 추가 할 수 있습니까? 답변을 표시 할 수 있습니까? – Joe