- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有两个模型类:
public class Survey
{
public int SurveyId { get; set; }
public string Name { get; set; }
}
public class User
{
public int UserId { get; set; }
public int SurveyId { get; set; }
public Survey Survey { get; set; }
}
我想将 Survey
重命名为 StudentSurvey
,这样它将具有 StudentSurveyId
。我相应地更新了模型中的类名和属性,并添加了一个迁移。
但是,我得到:
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_User_Surveys_SurveyId". The conflict occurred in database "AppName", table "dbo.Survey", column 'SurveyId'.
我认为它正在尝试删除数据,因为它需要列中的数据(不能为空),所以我看到了该错误。但我不想删除数据。我怎样才能重命名它?
câu trả lời hay nhất
EF Core 将实体类重命名视为删除旧实体并添加新实体,因此生成迁移以删除原始表并创建新表。
解决方法需要执行以下步骤:
(1) 在重命名实体之前,使用 ToTable
Và HasColumnName
流畅的 API 或数据注释“重命名”表和 PK 列。也对引用实体的 FK 列执行相同的操作。
Ví dụ:
[Table("StudentSurveys")]
public class Survey
{
[Column("StudentSurveyId")]
public int SurveyId { get; set; }
public string Name { get; set; }
}
public class User
{
public int UserId { get; set; }
[Column("StudentSurveyId")]
public int SurveyId { get; set; }
public Survey Survey { get; set; }
}
(2) 添加新迁移。它将正确重命名表、PK 列、FK 列和关联的约束:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Users_Surveys_SurveyId",
table: "Users");
migrationBuilder.DropPrimaryKey(
name: "PK_Surveys",
table: "Surveys");
migrationBuilder.RenameTable(
name: "Surveys",
newName: "StudentSurveys");
migrationBuilder.RenameColumn(
name: "SurveyId",
table: "Users",
newName: "StudentSurveyId");
migrationBuilder.RenameIndex(
name: "IX_Users_SurveyId",
table: "Users",
newName: "IX_Users_StudentSurveyId");
migrationBuilder.RenameColumn(
name: "SurveyId",
table: "StudentSurveys",
newName: "StudentSurveyId");
migrationBuilder.AddPrimaryKey(
name: "PK_StudentSurveys",
table: "StudentSurveys",
column: "StudentSurveyId");
migrationBuilder.AddForeignKey(
name: "FK_Users_StudentSurveys_StudentSurveyId",
table: "Users",
column: "StudentSurveyId",
principalTable: "StudentSurveys",
principalColumn: "StudentSurveyId",
onDelete: ReferentialAction.Cascade);
}
(3) 删除注解/流式配置并进行实际的类/属性重命名:
public class StudentSurvey
{
public int StudentSurveyId { get; set; }
public string Name { get; set; }
}
public class User
{
public int SurveyUserId { get; set; }
public int StudentSurveyId { get; set; }
public StudentSurvey StudentSurvey { get; set; }
}
重命名相应的 DbSet
(如果有):
public DbSet StudentSurveys { get; set; }
你就完成了。
您可以通过添加新的迁移来验证这一点 - 它将具有空的 Up
Và Down
phương pháp.
关于c# - 在不删除数据的情况下重命名 Entity Framework Core 中的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49799627/
Tôi đang cố gắng lập hồ sơ ứng dụng Node.js đang chạy của mình bằng Công cụ lập hồ sơ sự kiện theo dõi của Google Chrome. Sau khi chọn mẫu điểm, tôi có thể chọn giữa ba chế độ xem: Từ trên xuống (cây) Từ trên xuống
Xin lỗi vì một câu hỏi có thể không hay, nhưng mặc dù đã nghiên cứu rất nhiều hướng dẫn và các câu hỏi khác về SO, tôi không thể tìm thấy câu trả lời. Điều tôi muốn làm rất đơn giản: hiển thị một ListView Android chứa một số lượng lớn các chuỗi được lưu trữ trong cơ sở dữ liệu. Ý tôi là "rất
Tôi đã bắt đầu nghiên cứu một thành phần mới và quyết định dùng thử Foundation 5 để xem nó như thế nào. Khi tạo biểu mẫu có trường ngang, điều đầu tiên tôi nhận thấy trong tài liệu là chúng sử dụng rất nhiều div để tạo kiểu. Vậy tôi là người tiếp theo
Tôi có điều khiển người dùng Windows Forms chứa điều khiển hiển thị hình ảnh của bên thứ 3 được cập nhật từ một chuỗi riêng biệt bằng lệnh gọi đại biểu BeginInvoke. Dưới tải CPU nặng, giao diện người dùng có thể bị khóa. Khi tôi nối thêm
Tôi có một loạt mã JS chủ yếu dựa vào các phần tử dom. Giải pháp thử nghiệm mà tôi hiện đang sử dụng dựa trên Selenium, nhưng AFAIK nó không đánh giá chính xác các lỗi js (lỗi addScript sẽ không khiến thử nghiệm của bạn thất bại, getEval sẽ
Tôi đang tạo một trò chơi dựa trên việc cuộn bản đồ/khối 2D. Mỗi khối biểu đồ (được lưu dưới dạng khối biểu đồ [21] [11] - tổng cộng 231 khối biểu đồ trên mỗi bản đồ) có thể chứa tối đa 21 khối biểu đồ
Tôi là người mới bắt đầu sử dụng giao diện người dùng đang cân nhắc tình huống sau: Một trang HTML nhất định phải chứa hình ảnh nặng (ví dụ: ảnh gif động), nhưng tôi không muốn buộc khách hàng phải đợi chậm để trang đó tải xuống đầy đủ trước khi họ có thể hãy tận hưởng một trang hay, thay vào đó tôi muốn Sẵn sàng cho anh ấy xem một hình ảnh nhẹ nhàng (ví dụ:
Tôi đang thiết kế một phần mềm nhỏ bao gồm: lấy tài nguyên trên Internet, một số tương tác của người dùng (chỉnh sửa nhanh tài nguyên), một số xử lý. Tôi muốn sử dụng nhiều tài nguyên (tất cả đều được liệt kê trong danh sách) để thực hiện việc này. Mỗi cái đều độc lập với những cái khác. Vì phần chỉnh sửa mệt mỏi nên tôi muốn làm cho người dùng (có thể
Tôi muốn so sánh hai kịch bản lý thuyết. Tôi đã đơn giản hóa trường hợp cho mục đích của câu hỏi. Nhưng về cơ bản đó là kịch bản người tiêu dùng sản xuất điển hình của bạn. (Trọng tâm của tôi là người tiêu dùng). Tôi có một Hàng đợi dữ liệu lớn mà tôi phải chuyển cho nhiều khách hàng. vậy thì hãy để chúng tôi
Tôi gặp vấn đề về phân loại nhị phân với sự mất cân bằng lớn ở nhãn 0 và 1 (thiểu số). Vì tập kiểm tra có quá ít hàng có nhãn 1 nên tôi đặt bài kiểm tra huấn luyện ít nhất là 70-30 hoặc 60-40 nên vẫn còn những quan sát quan trọng. Bởi vì tôi đã không đo nó quá nhiều
Tôi là một lập trình viên xuất sắc, rất giỏi!