【问题标题】:LINQ to Entities delete all entries in many-to-many relationshipLINQ to Entities 删除多对多关系中的所有条目
【发布时间】:2011-10-18 01:00:05
【问题描述】:

我今天早些时候问了very similar question,所以你可能会觉得有点似曾相识,但我恐怕无法解决这个问题。

我有 3 个 MySql 表:StudentsClassesStudentsInClasses

实体框架将它们转换为两个实体 StudentClass,每个实体通过多对多导航属性(例如 Student.Classes)链接到另一个。

但是没有StudentsInClasses实体,所以最好的调用方式是什么,使用LINQ to Entities,相当于SQL

DELETE FROM StudentsInClasses;

我绝对想避免加载所有Classes 和他们的Students。我当然可以那样做,但那太可怕了,因为有成千上万个,应该没有必要。

非常感谢。

【问题讨论】:

    标签: .net linq entity-framework linq-to-entities


    【解决方案1】:

    首先:据我所知,如果不先加载数据,就无法使用 EF 删除数据。

    其次:可以使用ADO或POCO(EF.4以上):

     try
            {
                using (testEntities db = new testEntities())
                {                    
                    db.ExecuteStoreCommand<returnClass>("DELETE FROM StudentsInClasses;", NULL);
                }
            }
            catch (Exception ex) { _Exceptions.ManageExceptions(ex);}
    

    【讨论】:

      【解决方案2】:
      Student.Class.Clear()
      

      就这么简单!只需保存更改,Many-to-Many 表就不会包含该学生的条目。

      【讨论】:

        【解决方案3】:

        如果您不喜欢像 Paperjam 建议的那样执行存储命令,您也可以为此创建一个存储过程。这将很好地映射到您的 ObjectContext 上的静态类型函数。

        【讨论】:

          【解决方案4】:

          如果您对 EF 映射有疑问,可以查看元数据文件。这些文件通常存在于项目的obj/Debug/edmxResourcesToEmbed 目录中。元数据文件yourEntities.msl 定义了对象和表之间的映射。 在此文件中,您应该会发现 Students.Classes 映射到 StudentInClasses 表中,因此删除该列表中的条目并保存学生等同于删除 StudentInClasses 表中的行。

          【讨论】:

            猜你喜欢
            • 2011-04-12
            • 2013-06-01
            • 2013-06-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-14
            • 2010-11-26
            • 2012-01-15
            相关资源
            最近更新 更多