实体框架4 -只使用外键持久化子对象

本文关键字:持久化 对象 框架 -只 实体 | 更新日期: 2023-09-27 17:55:07

在我的EF4模型中,我有一个多对多的关系(许多组可以有许多程序)。

我有一组程序Id和一个组。我希望我的组拥有由我拥有的程序Id所代表的程序。

我不想做的是去数据库获取程序实体。我已经知道他们的Id了。

我该怎么做?

实体框架4 -只使用外键持久化子对象

使用虚拟类的技巧:

// you have a group
var group = GetGroupSomehow();
// if group is unknown to the context Attach it
context.Groups.Attach(group); // if it is a new group use AddObject
// now add programs
foreach(var program in programId.Select(id => new Program { Id = id }))
{
    // Attach dummy program first
    context.Programs.Attach(program);
    // Now make relation between group and program
    group.Programs.Add(program);
} 
context.SaveChanges();

唯一的要求是programIds中的Program没有被加载。如果任何程序是加载的,它将更复杂,因为您首先必须在ObjectStateManager中检查它并使用加载实例。