【问题标题】:Cascade delete occurring itself in Code-First Entity-Framework(version 5.0)级联删除发生在 Code-First Entity-Framework(5.0 版)中
【发布时间】:2014-03-06 14:27:34
【问题描述】:

我有以下两门课

第 1 类:

[Table("players")]
public class Player
{
    [Key, Column("id"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    <summary>
    /// Video Location w.r.t. Current Screen (Top)
    /// </summary>
    [Column("top")]
    public double Top { get; set; }
    /// <summary>
    /// Video Location w.r.t. Current Screen (Width)
    /// </summary>
    [Column("width")]
    public double Width { get; set; }
    /// <summary>
    /// Video Location w.r.t. Current Screen (Height)
    /// </summary>
    [Column("height")]
    public double Height { get; set; }




    [Column("group_id")]
    public int group_id { get; set; }

    [ForeignKey("group_id")]
    public Group Group { get; set; }
} 

我的另一门课是 第 2 课:

    [Table("groups")]
    public class Group
    {
         [Key, Column("id"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
          public int Id { get; set; }

           [Column("guid")]
           public string Guid { get; set; }

           [Column("is_deleted")]
           public bool IsDeleted { get; set; }

           [Column("name")]
            public string Name { get; set; }

   }

我在从数据库中删除组条目时遇到问题。 每当我删除任何组时,属于该组的所有玩家都会被自动删除。 我正在使用带有实体框架(5.0)的代码优先。 任何帮助表示赞赏。

【问题讨论】:

  • 听起来您数据库上的 FK 设置不正确,关系方向错误。如果设置了级联删除,如果 FK 错误,您将遇到麻烦。如果您不使用 FK,那么您当然应该使用。希望您没有使用实体框架设计数据库。

标签: c# database entity-framework ef-code-first


【解决方案1】:

您需要专门映射该场景。你可以这样做:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {            
        modelBuilder.Entity<Player>().HasOptional(x => x.Group).WithMany().WillCascadeOnDelete(false);
    }

这将使播放器上的组是可选的,这意味着它可以在不引用组的情况下存在,并且还会指示您的上下文不要进行级联删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多