简体   繁体   English

ef核心2-在表'Y'上引入FOREIGN KEY约束'X'可能会导致循环或多个级联路径

[英]ef core 2 - Introducing FOREIGN KEY constraint 'X' on table 'Y' may cause cycles or multiple cascade paths

I know, I know, already exist many questions like that, but I dont find how can I solve this problem in my scenario. 我知道,我已经存在许多类似的问题,但是我找不到在我的方案中如何解决此问题。

I have a customer and a have a seller , a customer not necessary is a seller , but all seller is a customer . 我有一个客户 ,一个有一个卖方 ,一个不必要的顾客是一个卖方 ,但是所有卖方都是一个顾客

In my order I have a customer and a seller , but a seller already have a custumer inside him 在我的订单中,我有一个客户和一个卖方 ,但是卖方内部已经有一个客户

It's my Customer Entity 这是我的客户实体

    public class Customer : BaseEntity
    {
        public Customer(Name name, DateTime? birthDay, Email email, string password, List<CreditDebitCard>  creditDebitCards = null)
        {
            [...]
        }

        public  Name Name { get; private set; }
        public DateTime? BirthDay { get; private set; }
        public  Email Email { get; private set; }
        public string Password { get; private set; }
        public int? CreditDebitCardId { get; private set; }
        public ICollection<CreditDebitCard> CreditDebitCards => _CreditDebitCards;
        public IEnumerable<Order> Orders { get; private set; }
        [...]
}

My Seller Entity 我的卖方实体

public class Seller : BaseEntity
    {
        public Seller(string schoolName, string cardIdPath, string identityNumber, int customerId)
        {
            [...]
        }

        public string SchoolName { get; private set; }
        public string CardIdPath { get; private set; }
        public string IdentityNumber { get; private set; }
        public Customer Customer { get; private set; }
        public int CustomerId { get; private set; }
        public IEnumerable<Order> Orders { get; private set; }

    }

My Order Entity 我的订单实体

public class Order : BaseEntity
    {
        public Order(IList<OrderItem> orderItems, int customerId, int sellerId)
        {
            [...]
        }

        #region Fields
        private IList<OrderItem> _orderItems;
        #endregion

        #region Properties
        public int SellerId { get; private set; }
        public Seller Seller { get; private set; }
        public int CustomerId { get; private set; }
        public Customer Customer { get; private set; }
        public EOrderStatus Status { get; private set; }
        public ICollection<OrderItem> OrderItems
        {
            get { return _orderItems; }
            private set { _orderItems = new List<OrderItem>(value); }
        }
        public decimal Total => GetTotal();

        #endregion
        [...]
   }

My OrderMap 我的订单图

public static class OrderMap
    {
        public static EntityTypeBuilder<Order> Map(this EntityTypeBuilder<Order> cfg)
        {
            cfg.ToTable("ORDER");
            cfg.HasKey(x => x.Id);
            cfg.Property(x => x.CreationDate).IsRequired();
            cfg.Property(x => x.IsActive).IsRequired();
            //cfg.Property(x => x.Discount).HasColumnType("money");
            cfg.Property(x => x.Status).IsRequired();
            cfg.HasMany(x => x.OrderItems);
            cfg.HasOne(x => x.Customer);
            cfg.HasOne(x => x.Seller).WithMany(b => b.Orders).OnDelete(DeleteBehavior.ClientSetNull);
            return cfg;
        }
    }

I already add a migration, but when i will set 'update-database' I get this error message: 我已经添加了迁移,但是当我设置'update-database'时,会出现以下错误消息:
Introducing FOREIGN KEY constraint 'FK_Order_Seller_SellerId' on table 'Order' may cause cycles or multiple cascade paths. 在表“ Order”上引入FOREIGN KEY约束“ FK_Order_Seller_SellerId”可能会导致循环或多个级联路径。 Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 Could not create constraint or index. 无法创建约束或索引。 See previous errors. 请参阅先前的错误。

it's a .netcore2.0 project and i'm using the ef-core 2 这是一个.netcore2.0项目,我正在使用ef-core 2

Solution
I added a seller into Cutomer and mapped it to only the seller have a customer 我将卖方添加到了Cutomer中,并将其映射到只有卖方有客户的情况

cfg.HasOne(x => x.Customer).WithOne(y => y.Seller).HasForeignKey<Customer>(z => z.SellerId);

My Seller map 我的卖家地图

public static class SellerMap 
    {
        public static EntityTypeBuilder<Seller> Map(this EntityTypeBuilder<Seller> cfg)
        {
            cfg.ToTable("SELLER");
            cfg.HasKey(x => x.Id);
            cfg.Property(x => x.CreationDate).IsRequired();
            cfg.Property(x => x.IsActive).IsRequired();
            cfg.HasOne(x => x.Customer).WithOne(y => y.Seller).HasForeignKey<Customer>(z => z.SellerId);
            cfg.Property(x => x.CardIdPath).IsRequired();
            cfg.Property(x => x.IdentityNumber);
            cfg.Property(x => x.SchoolName);

            return cfg;
        }
    }

MY Customer Map 我的客户地图

public static class CustomerMap
{ 
    public static EntityTypeBuilder<Customer> Map(this EntityTypeBuilder<Customer> cfg)
    {
        cfg.ToTable("CUSTOMER");
        cfg.HasKey(x => x.Id);
        cfg.Property(x => x.CreationDate).IsRequired();
        cfg.Property(x => x.IsActive).IsRequired();
        cfg.Property(x => x.BirthDay).IsRequired();
        cfg.OwnsOne(x => x.Email);
        cfg.OwnsOne(x => x.Name);
        cfg.HasMany(x => x.CreditDebitCards).WithOne(y => y.Customer);
        //cfg.HasOne(x => x.Seller).WithOne(y => y.Customer).IsRequired(false);

        return cfg;
    }
}

My Seller entity 我的卖方实体

    public class Seller : BaseEntity
    {
        public Seller(string schoolName, string cardIdPath, string identityNumber, int customerId)
        {
            SchoolName = schoolName;
            CardIdPath = cardIdPath;
            IdentityNumber = identityNumber;
            CustomerId = customerId;
        }

        public string SchoolName { get; private set; }
        public string CardIdPath { get; private set; }
        public string IdentityNumber { get; private set; }
        public Customer Customer { get; private set; }
        public int CustomerId { get; private set; }
        public IEnumerable<Product> Products { get; private set; }
        public int? ProductId { get; private set; }
        public IEnumerable<Order> Orders { get; private set; }

    }
}

My Customer entity 我的客户实体

public class Customer : BaseEntity
{
    public Customer(Name name, DateTime? birthDay, Email email, string password, List<CreditDebitCard>  creditDebitCards = null)
    {
        CreationDate = DateTime.Now;
        Name = name;
        BirthDay = birthDay;
        Email = email;
        Password = password;
        _CreditDebitCards = creditDebitCards ?? new List<CreditDebitCard>();
    }
    #region Fields
    private IList<CreditDebitCard> _CreditDebitCards;
    #endregion

    #region Properties
    public  Name Name { get; private set; }
    public DateTime? BirthDay { get; private set; }
    public  Email Email { get; private set; }
    public string Password { get; private set; }
    public int? CreditDebitCardId { get; private set; }
    public ICollection<CreditDebitCard> CreditDebitCards => _CreditDebitCards;
    public IEnumerable<Order> Orders { get; private set; }
    public Seller Seller { get; private set; }
    public int SellerId { get; private set; }
    #endregion

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 引入FOREIGN KEY约束可能会导致EF Core中的循环或多个级联路径 - Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths in EF Core 实体框架C#在表Y中引入外键X可能会导致循环或多个级联路径 - Entity Framework C# Introducing A Foreign Key X In Table Y May Cause Cycles OR Multiple Cascade Paths SQL 错误:引入 FOREIGN KEY 约束可能会导致循环或多个级联路径。 实体框架核心 - SQL Error: Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths. Entity Framework Core 在表上引入外键约束可能会导致循环或多个级联路径 - Introducing Foreign key Constraint on table may cause cycles or multiple cascade paths 在表“模型”上引入FOREIGN KEY约束“列”可能会导致循环或多个级联路径 - Introducing FOREIGN KEY constraint 'Column' on table 'Model' may cause cycles or multiple cascade paths 实体框架:在表 '' 上引入 FOREIGN KEY 约束 '' 可能会导致循环或多个级联路径 - Entity Framework: Introducing FOREIGN KEY constraint '' on table '' may cause cycles or multiple cascade paths 表&#39;UsageSummaries&#39;上的多态与引入FOREIGN KEY约束可能会导致循环或多个级联路径 - Polymorphism vs Introducing FOREIGN KEY constraint '' on table 'UsageSummaries' may cause cycles or multiple cascade paths EF FOREIGN KEY约束可能会导致循环或多个级联路径 - EF FOREIGN KEY constraint may cause cycles or multiple cascade paths FOREIGN KEY 约束可能会导致循环或多个级联路径。 ef core 3(根本无法创建数据库) - FOREIGN KEY constraint may cause cycles or multiple cascade paths. ef core 3 (cannot create a DB at all) 在表table上引入FOREIGN KEY约束键可能会导致循环或多个级联路径。 指定ON DELETE…错误 - Introducing FOREIGN KEY constraint key on table table may cause cycles or multiple cascade paths. Specify ON DELETE … Error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM