LINQ to Entities删除多对多关系中的所有条目

时间:2011-10-18 01:00:06

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

我今天早些时候问过very similar question,所以你可能会得到一些似曾相识的感觉,但我担心我不能解决这个问题。

我有3个MySql表:StudentsClassesStudentsInClasses

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

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

DELETE FROM StudentsInClasses;

我绝对希望避免加载所有Classes及其Students。当然,我可以这样做,但那将是可怕的,因为有成千上万的,应该没有必要。

非常感谢。

4 个答案:

答案 0 :(得分:3)

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

其次:你可以使用ADO或POCO(高于EF.4):

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

Student.Class.Clear()

就这么简单!只需保存更改,“多对多”表将没有该学生的条目。