我今天早些时候问过very similar question,所以你可能会得到一些似曾相识的感觉,但我担心我不能解决这个问题。
我有3个MySql表:Students
,Classes
和StudentsInClasses
。
实体框架将这些实体转换为两个实体Student
和Class
,每个实体使用多对多导航属性链接到另一个实体(例如Student.Classes
)。
但是没有StudentsInClasses
实体,所以调用的最佳方法是什么,使用LINQ to Entities,相当于SQL :
DELETE FROM StudentsInClasses;
我绝对希望避免加载所有Classes
及其Students
。当然,我可以这样做,但那将是可怕的,因为有成千上万的,应该没有必要。
非常感谢。
答案 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()
就这么简单!只需保存更改,“多对多”表将没有该学生的条目。