实体框架4 - 将现有模型添加到关联

时间:2011-04-21 08:50:11

标签: entity-framework entity-framework-4

我已经定义了一个关系,这个模块可以包含很多课程。

我有一个界面,允许您向模块添加课程;我已经尝试了下面的代码,但是这会导致在模块表中创建一个新模块,然后添加到课程中

int moduleID = viewModel.moduleID;
course.Modules.Add( new Module { ID = moduleID } )
SaveChanges();

应该采用什么方法?

编辑:使用断点进行调试显示整数moduleID是正确的。

2 个答案:

答案 0 :(得分:4)

你可以试试这个:

var module = new Module { ID = viewModel.moduleID };
// Attach first so that context doesn't track module as a new one
context.Modules.Attach(module); 
// Now make connection to attached module
course.Modules.Add(module);
context.SaveChanges();

如您所见,我不需要从数据库加载模块来建立连接。这对于多对多关系非常有用,但在一对多关系的情况下会更复杂。

答案 1 :(得分:1)

您正在创建一个新模块,这意味着您获得的行为是正常的。您需要做的是,从您的数据上下文中获取与Module对应的moduleID对象,然后将其添加到您的课程中。

int moduleID = viewModel.moduleID;
var module = context.Modules.FirstOrDefault(m => m.ID == moduleID);
course.Modules.Add(module)
SaveChanges();

希望这会有所帮助:)