【发布时间】:2020-04-29 09:42:19
【问题描述】:
我已经开始为一个项目处理 后端 部分,目前,我正在尝试使用 EF Core 代码生成数据库 -首先,但我在尝试运行 迁移时遇到了问题(与cascade delete )。
首先,我将在 ERD 下方附上我在 C# 中创建的 DB 和 类:
而对应的分类是:
Account.cs
public class Account
{
public int Id { get; set; }
public string Email { get; set; }
public string ExternalAccountId { get; set; }
public int CustomerId { get; set; }
public Customer Customer { get; set; }
}
BillingAddress.cs
public class BillingAddress
{
public int Id { get; set; }
public string Address { get; set; }
public int CustomerId { get; set; }
public Customer Customer { get; set; }
public List<Payment> Payments { get; set; }
}
BillingDetail.cs
public class BillingDetail
{
public int Id { get; set; }
public int CreditCardNumber { get; set; }
public DateTime ExpirationDate { get; set; }
public short Cvv { get; set; }
public int CustomerId { get; set; }
public Customer Customer { get; set; }
public List<Payment> Payments { get; set; }
}
Customer.cs
public class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string PhoneNumber { get; set; }
public int Cnp { get; set; }
public Account Account { get; set; }
public List<BillingDetail> BillingDetails { get; set; }
public List<BillingAddress> BillingAddresses { get; set; }
public List<Rental> Rentals { get; set; }
}
Payment.cs
public class Payment
{
public int Id { get; set; }
public int RentalId { get; set; }
public Rental Rental { get; set; }
public int BillingDetailId { get; set; }
public BillingDetail BillingDetail { get; set; }
public int BillingAddressId { get; set; }
public BillingAddress BillingAddress { get; set; }
}
Rental.cs
public class Rental
{
public int Id { get; set; }
public DateTime PickupDate { get; set; }
public DateTime DropoffDate { get; set; }
public int CustomerId { get; set; }
public Customer Customer { get; set; }
public List<Payment> Payments { get; set; }
public List<RentalVehicle> RentalVehicles { get; set; }
}
RentalVehicle.cs
public class RentalVehicle
{
public int Id { get; set; }
public int RentalId { get; set; }
public Rental Rental { get; set; }
public int VehicleId { get; set; }
public Vehicle Vehicle { get; set; }
}
Vehicle.cs
public class Vehicle
{
public int Id { get; set; }
public string Model { get; set; }
public string Brand { get; set; }
public string Color { get; set; }
public short ManufactureYear { get; set; }
public string Vin { get; set; }
public int Mileage { get; set; }
public short Horsepower { get; set; }
public string GearBox { get; set; }
public byte EngineSize { get; set; }
public float Price { get; set; }
public byte NoDoors { get; set; }
public List<RentalVehicle> RentalVehicles { get; set; }
}
我已生成迁移,当我尝试运行它时,我收到如下错误:
Introducing FOREIGN KEY constraint 'FK_Payments_BillingDetails_BillingDetailId' on table 'Payments' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
我找到了一些解决方法,可以在迁移中将 ReferentialAction.Cascade 替换为 ReferentialAction.NoAction 用于 onDelete,但我不确定如果我真的应该这样做,以及从长远来看它将如何影响我的应用程序。
我应该怎么做才能解决这个问题?最佳做法是什么?
【问题讨论】:
标签: c# database entity-framework-core ef-code-first