更新数据库efcore asp.net核心上的错误

时间:2019-12-23 14:38:58

标签: sql-server asp.net-core entity-framework-core

namespace LoopSquad.Core.Entities.Addresses
{
    public class Address
    {
        public int AddressId { get; set; }
        public string NoName { get; set; }
        public string AddressL1 { get; set; }
        public string AddressL2 { get; set; }
        public string Town { get; set; }
        public string County { get; set; }
        public string Postcode { get; set; }
        [ForeignKey("Customer")]
        public int CustomerId { get; set; }
        public Customers.Customer Customer { get; set; }

        public ICollection<Jobs.Job> Jobs { get; set; }
    }
}


namespace LoopSquad.Core.Entities.Customers
{
    public class Customer
    {
        [Key]
        public int CustomerId { get; set; }
        public string CompanyName { get; set; }
        [ForeignKey("FKCustomerType")]
        public int CustomerTypeId { get; set; }
        public CustomerType CustomerType { get; set; }

        public ICollection<Addresses.Address> Addresses { get; set; }

    }

}

namespace LoopSquad.Core.Entities.Jobs
{
    public class Job
    {
        [Key]
        public int JobId { get; set; }

        [ForeignKey("FKCustomer")]
        public int CustomerId { get; set; }
        public Customers.Customer Customer { get; set; }

        [ForeignKey("FKAddress")]
        public int AddressId { get; set; }
        public Addresses.Address Address { get; set; }


        public DateTime BookedDateTime { get; set; }
        public DateTime CreatedDateTime { get; set; }

        [ForeignKey("FKUser")]
        public int UserId { get; set; }
        public Users.ApplicationUser ApplicationUser { get; set; }
        [ForeignKey("FRoomLayout")]
        public int RoomLayoutId { get; set; }
        public RoomLayout RoomLayout { get; set; }

        [ForeignKey("FKJobType")]
        public int JobTypeId { get; set; }
        public JobType JobType { get; set; }

        [ForeignKey("FKLoopType")]
        public int loopTypeId { get; set; }
        public LoopType LoopType { get; set; }

        [ForeignKey("FKJobStatus")]
        public int JobStatusId { get; set; }
        public JobStatus JobStatus { get; set; }
    }
}

1 个答案:

答案 0 :(得分:0)

我重现您的问题,这是因为默认情况下启用了级联删除,这将导致您的关系循环。

例如,尝试在dbcontext中使用OnDelete(DeleteBehavior.Restrict)禁用它

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }      

    public DbSet<Address> Addresses { get; set; }
    public DbSet<Customer> Customers { get; set; }
    public DbSet<Job> Jobs { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Job>().HasOne(p => p.Customer)
                                  .WithMany()
                                  .HasForeignKey(p => p.CustomerId)
                                  .OnDelete(DeleteBehavior.Restrict);
    }
}

请参阅https://docs.microsoft.com/en-us/ef/core/saving/cascade-delete