【发布时间】:2015-11-03 00:12:31
【问题描述】:
有人在这里问过类似的问题:How can I use EF6 to update a many to many table
我提前提到了这一点,因为我无法得到任何可行的解决方案。
我还研究了 Code Project 上给出的解决方案:http://www.codeproject.com/Tips/893609/CRUD-Many-to-Many-Entity-Framework,但这对我也不起作用。
我试图让这个尽可能简单。
我有两个表:dbo.Teacher 和 dbo.Student。每个都有一个“ID”列,作为主键服务器。我还有一个名为 dbo.StudentTeacher 的第三个表,它正好有两列,两者都是不可为空的,并且前两个表的外键是;换句话说,它在教师和学生之间建立了多对多的关系。正如预期的那样,设计的 EDMX 仅显示 dbo.Student 和 dbo.Teacher 并推断它们之间的关系。
这是上面的脚本;数据库中没有其他内容。
CREATE TABLE dbo.Teacher
(
Id INT NOT NULL PRIMARY KEY,
Name VARCHAR(MAX)
);
CREATE TABLE dbo.Student
(
Id INT NOT NULL PRIMARY KEY,
Name VARCHAR(MAX)
);
CREATE TABLE dbo.TeacherStudent
(
TeacherId INT NOT NULL FOREIGN KEY REFERENCES Teacher(Id),
StudentId INT NOT NULL FOREIGN KEY REFERENCES Student(Id)
);
INSERT INTO Teacher(Id, Name)
VALUES
(101, 'Tom');
INSERT INTO Student(Id, Name)
VALUES
(201, 'Sue'),
(202, 'Stan');
INSERT INTO TeacherStudent(TeacherId, StudentId)
VALUES
(101, 201);
现在我已经建立了我的数据结构,我想完成一个非常简单的任务。从上面的脚本中,您可以看到我们有一位名叫“Tom”的老师,他有一个名叫“Sue”的学生。我们还有一个名叫“Stan”的学生,没有老师。我的任务是修改数据库,使 Sue 不再是 Tom 的学生,而 Stan 成为 Tom 的学生。
为此,我编写了以下代码:
class Program
{
static void Main(string[] args)
{
using (var entities = new TestEntities())
{
// There is only one teacher in the system.
Teacher teacher = entities.Teachers.Single();
// This teacher has a student #201: Sue.
// I want to replace her with student #202: Stan.
teacher.Students.Clear();
teacher.Students.Add(new Student() { Id = 202 });
entities.SaveChanges();
}
}
}
看起来很简单:清除与汤姆关联的学生,然后将斯坦添加为汤姆的学生。但是,当我运行代码时,出现以下错误:Unable to update the EntitySet 'TeacherStudent' because it has a DefiningQuery and no <DeleteFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.
我尝试通过尝试在不添加 Stan 的情况下将 Sue 从 Tom 的学生中删除来简化问题,但我得到了完全相同的错误消息。
据我了解,当 Entity Framework 没有足够的信息来执行您希望它执行的操作时,通常会发生此错误,但我真的看不出缺少什么。有两个简单的表,它们之间有一个连接表,我需要能够更改哪些行与哪些其他行相关。
我还应该注意,如果我没记错的话,我希望在此示例中进行的更改应该只影响 dbo.TeacherStudent 表;其他两张桌子不要碰。
【问题讨论】:
标签: entity-framework orm