代码之家  ›  专栏  ›  技术社区  ›  Sergio Tapia

这能安全地删除我的记录吗?

  •  1
  • Sergio Tapia  · 技术社区  · 14 年前

    http://imgur.com/yLKif.png

    我正在使用linqtosql,在.dbml文件中,我将所有的文件夹都拖到了图形表面。

    下面是我使用的方法来安全删除区域。记住文档与某个区域关联,因此我不能只删除它,并保留文档。

            ScansDataContext db = new ScansDataContext();
    
            /// <summary>
            /// Deletes an Area object from the database along with all associations in the database.
            /// </summary>
            /// <param name="area">Area object to save</param>
            public void Delete(Area area)
            {
                db.DocumentAreaRelations.DeleteAllOnSubmit(area.DocumentAreaRelations);
                db.Areas.DeleteOnSubmit(area);
                db.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict);
            }
    
    3 回复  |  直到 14 年前
        1
  •  3
  •   Justin Niessner    14 年前

    假设数据库中仍然有强制关系的约束条件…看起来你应该可以去找我。如果数据库中没有设置密钥,则需要添加它们。

    首先删除所有关系,然后删除实际实体,然后 SubmitCahnges()

        2
  •  1
  •   Waleed A.K.    14 年前

    是的,这应该会删除记录。但是要确保您已经正确地设置了数据库约束。

    CONSTRAINT [FK_tblCategory_tblCompany] FOREIGN KEY([CompanyID]) 
    REFERENCES [tblCompany] ([ID])ON DELETE CASCADE ON UPDATE CASCADE
    

    或者您可以在dataentity中设置它

        3
  •  0
  •   instantmusic    14 年前

    我将外键设置为删除时级联。所以考虑到表的情况,我会删除一个区域,一旦delete命令被发送到服务器,它就会自动级联到join表。可以在连接表中使用OnDelete触发器,以确保在取出文档的连接记录后安全地删除它们。

    LINQ从来没有抱怨过,但为了安全起见,我在LINQ类中总是有一个“scrubing”函数,它可以清除单个对象的外键关系(如果它们被枚举的话)。不过,这主要是针对正在编辑的对象,而不是被删除的对象。

    Partial Class MyLINQObject  
        Public Sub ScrubRelationships()  
            _RelatedTableObjects = New EntityRef(Of RelatedTableObject)  
        End Sub  
    End Class