c# - ADO.NET Entity Framework : How to get auto cascading deletions?

标签 c# database entity-framework ado.net

我正在将 Ado.Net Entity Framework 与 ASP.NET MVC 结合使用。

例如,在我的 MSSQL 2008 数据库中,我有以下简化的表和关系:

 (Song) 1--* (Version) 1 -- 1 (VersionInfo)

是否可以在删除歌曲时自动删除链接的版本及其版本信息?

目前我正在使用类似下面的代码,这是大量的手工工作,因为有些表有多达 8 个关系,而这些关系有时也有子关系:

  db = new Database() //Entities
  Song song = db.Song.First();

  Song.Version.Load();

  foreach(Version version in Song.Version.ToList())
  {
       //Remove Song-Version Reference.
       song.Version.Remove(version);


       //Get The VersionInfo so we can delete it after we deleted the Version object.
       version.VersionInfoReference.Load();
       VersionInfo versionInfo = version.VersionInfo;

       //Now we can delete the Version Object.
       db.DeleteObject(version);
       //Now we can also delete the versionInfo, since the reference is gone.
       db.DeleteObject(versionInfo);

  }

  db.DeleteObject(song);

必须有一种更简单的方法来进行级联删除。我已经尝试在删除时将 MSSQL 中的关系设置设置为级联,但它没有做任何事情...我是否错过了什么?

不管怎样,其他人是如何解决这个问题的?

最佳答案

您不应该在 Entity Framework 中这样做。所有流行的关系数据库都支持外键上的ON CASCADE DELETE,这也更加高效。我建议你就这样吧。

在您的情况下,您可能必须将歌曲中的删除级联到版本,并将版本中的删除级联到版本信息。只需在 SQL 管理器中加载表设计器,您应该会在关系下看到相关选项。

关于c# - ADO.NET Entity Framework : How to get auto cascading deletions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/930235/

相关文章:

c# - ??合并空字符串?

C#项目引用netcoreapp3.1中的F#类lib

java - 查询计算与编程计算

database - 如何查看数据库服务器中当前监听器的状态?oracle

c# - C++中的字符串?

c# - 如何使用游戏对象作为 Unity 中的开关在第一人称和第三人称相机之间切换?

database - Oracle 中数字的可变大小数据类型

c# - WPF 数据网格不会自动刷新 Entity Framework

sql-server - LINQ(到 Oracle)- Row_Number() Over Partition By

c# - 使用第一个/最早日期返回多个记录