我讨厌这三张桌子。两个表具有多对多关系,因此它生成第三个表。
我正在使用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);
}
答案 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
希望有所帮助!