这会安全删除我的记录吗?

时间:2010-06-18 15:54:31

标签: c# linq-to-sql

我讨厌这三张桌子。两个表具有多对多关系,因此它生成第三个表。

http://imgur.com/yLKif.png

我正在使用Linq-to-SQL,在.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 个答案:

答案 0 :(得分:3)

假设你仍然在数据库中有强制执行关系的约束......看起来你应该很高兴找我。如果您没有在数据库中设置密钥,则需要添加它们。

您首先删除所有关系,然后删除实际实体,并SubmitCahnges()包装本地事务中的所有内容,以便它是一个单独的工作单元。

答案 1 :(得分:1)

是的,应该删除记录。但请确保您已正确设置数据库约束,例如

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

或者您可以在数据实体中设置

答案 2 :(得分:0)

我使用MS SQL Server 2008创建了一些类似的表。

我将外键设置为在删除时级联。因此,鉴于你是表情况,我会删除一个区域,一旦删除命令被发送到服务器,它将自动级联到连接表。可以在连接表中使用OnDelete Trigger,以确保在取出连接记录后安全删除文档。

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

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

希望有所帮助!