【问题标题】:LINQ To Entity Framework - Cascade delete - Error [duplicate]LINQ To Entity Framework - 级联删除 - 错误 [重复]
【发布时间】:2022-01-12 11:14:28
【问题描述】:

我有两个这样的相关表:

用户

 public partial class Users
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Users()
        {
            this.Orders = new HashSet<Orders>();
        }
    
        public int ID { get; set; }
        public int UserType_ID { get; set; }
        public string Email { get; set; }

    
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Orders> Orders { get; set; }
        public virtual UserTypes UserTypes { get; set; }
    }

订单

 public partial class Orders
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Orders()
        {
            this.Payments = new HashSet<Payments>();
        }
    
        public int ID { get; set; }
        public int User_ID { get; set; }
        public int Plan_ID { get; set; }
        public System.DateTime Date { get; set; }
        public int OrderStatus_ID { get; set; }
    
        public virtual OrderStatus OrderStatus { get; set; }
        public virtual Plans Plans { get; set; }
        public virtual Users Users { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Payments> Payments { get; set; }
    }

现在我想强制实体框架级联删除用户行。
这是删除用户的代码:

using (Crypto_Shuffler_Entities entities = new Crypto_Shuffler_Entities())
{
    var users = from User in entities.Users
                where User.Email.ToLower() == "test@gmail.com"
                select User;
    entities.Users.Remove(users.FirstOrDefault());
    entities.SaveChanges();
}

这里有错误:

更新条目时出错。查看内部异常 了解详情。

Message = "DELETE 语句与 REFERENCE 冲突 约束“FK_Orders_Users”。数据库发生冲突 “Crypto_DB”、表“dbo.Orders”、“User_ID”列。\r\n 语句已终止。”

如何强制实体框架进行级联删除?

【问题讨论】:

  • 你似乎在使用数据库优先,这意味着他数据库中的 FK 应该有一个级联规范。
  • @Gert Arnold sql server 中哪个选项可以定义级联?
  • 把你的评论作为答案。

标签: c# webforms entity-framework-6 cascading-deletes


【解决方案1】:

我认为您需要删除订单中的用户的第一参考 这里是一对多关系 所以根据我的观点,首先按顺序删除用户,然后将其保存到数据库,然后删除该用户的行,这可能不会冲突

【讨论】:

  • 感谢您的回答,但我的表是例如。如何强制EF自动删除相关订单记录?对于更多表,很难单独删除每个相关的。
  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 2017-06-02
  • 1970-01-01
相关资源
最近更新 更多