c# - 执行 DbCommand 失败 - 引入 FOREIGN KEY 约束
问题描述
此处显示通过 dotnet-core 迁移访问更新数据库时出现以下错误。
Failed executing DbCommand (48ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [DepartmentSchool] (
[DepartmentID] uniqueidentifier NOT NULL,
[SchoolsId] uniqueidentifier NOT NULL,
[Id] uniqueidentifier NOT NULL,
CONSTRAINT [PK_DepartmentSchool] PRIMARY KEY ([SchoolsId], [DepartmentID]),
CONSTRAINT [FK_DepartmentSchool_Department_DepartmentID] FOREIGN KEY ([DepartmentID]) REFERENCES [Department] ([ID]) ON DELETE CASCADE,
CONSTRAINT [FK_DepartmentSchool_School_SchoolsId] FOREIGN KEY ([SchoolsId]) REFERENCES [School] ([ID]) ON DELETE CASCADE
);
下面是实体关系类:
学校班级(第一桌):
public partial class Schools
{
public Guid ID { get; set; }
public string Name { get; set; }
public Guid? CountryId { get; set; }
public Country Country { get; set; }
public ICollection<DepartmentSchool> DepartmentSchools { get; set; }
}
系类(二表):
public partial class Department
{
public Guid ID { get; set; }
public string Title { get; set; }
public DateTime CreatedAt { get; set; }
public ICollection<DepartmentSchool> DepartmentSchools { get; set; }
}
系校班(中表)
public class DepartmentSchool
{
public Guid Id { get; set; }
public Guid DepartmentID { get; set; }
public Department Department { get; set; }
public Guid SchoolsId { get; set; }
public Schools Schools { get; set; }
}
在 modulbulider 中,它的关系在这里定义:
//Many to many relationship between School and Depatment
modelBuilder.Entity<DepartmentSchool>()
.HasKey(ds => new { ds.SchoolsId, ds.DepartmentID });
modelBuilder.Entity<DepartmentSchool>()
.HasOne(ds => ds.Department)
.WithMany(d => d.DepartmentSchools)
.HasForeignKey(ds => ds.DepartmentID);
modelBuilder.Entity<DepartmentSchool>()
.HasOne(ds => ds.Schools)
.WithMany(d => d.DepartmentSchools)
.HasForeignKey(ds => ds.SchoolsId);
解决方案
通过在引用中允许空值来禁用级联删除。
.OnDelete(DeleteBehavior.Restrict);
下面的代码只是一个例子:
modelBuilder.Entity<Invoice>()
.HasOne(i => i.Customer)
.WithMany(c => c.Invoices)
.OnDelete(DeleteBehavior.Restrict);
推荐阅读
- php - 为菜单生成链接时传递一些数组的函数
- r - Legends not visible in Line Area Graph
- javascript - 删除索引时,JavaScript forEach 不会完全迭代索引
- php - How to add in digits per json objects wih php
- android - Writing data to firebase but instead the app stops
- firebase - 如何访问数组中的父身份验证状态
- android - 在 android studio 3.3 org.gradle.execution.MultipleBuildFailures 中构建应用程序时出错:构建完成,出现 1 次失败
- javascript - AWS SDK JS S3 getObject 流元数据
- ruby-on-rails - 连接中断包括
- complexity-theory - 如果我们能证明容量有限的背包问题在多项式时间内可以解决,那么所有的背包都属于P