EF代码优先-添加多对多记录时,不会保存任何内容

本文关键字:保存 任何内 代码 EF 添加 记录 | 更新日期: 2023-09-27 18:22:10

我首先使用EF 4.3代码。我有很多对很多的关系。我正在尝试在代码中附加并保存ID数组中的相关记录。理想情况下,我不想在保存这些相关实体之前加载它们。。。

这是我的模型-安装程序可以有许多MasterInstances:

public class MasterInstance
{
    public int MasterInstanceId { get; set; }
    [Required] public string HostName { get; set; }
    [Required] public string Name { get; set; }
    [Required] public string ConnectionString { get; set; }
    public virtual ICollection<MasterInstanceLocation> MasterInstanceLocations { get; set; }
    public ICollection<Installer> PermittedInstallers { get; set; }
}
public class Installer
{
    public int InstallerId { get; set; }
    [Required] public string UserName { get; set; }
    [Required] public string Password { get; set; }
    public ICollection<MasterInstance> PermittedMasterInstances { get; set; }
}

在我的代码中,我试图将master instances连接到installer:

installer.PermittedMasterInstances = new List<MasterInstance>();
foreach (var permittedMasterInstanceId in installerModel.SelectedMasterInstances)
{
    var masterInstance = new MasterInstance {MasterInstanceId = permittedMasterInstanceId};
    context.MasterInstances.Attach(masterInstance);
    installer.PermittedMasterInstances.Add(masterInstance);
}
context.Entry(installer).State = EntityState.Modified;
context.SaveChanges();

但是。。链接表中没有任何内容:(有什么想法吗?

编辑

唯一有效的是这个相当令人不快的解决方案。。。这是唯一的路吗?

foreach (var permittedMasterInstanceId in installerModel.SelectedMasterInstances)
{
    var masterInstance = context.MasterInstances.Single(mi => mi.MasterInstanceId == permittedMasterInstanceId);
    masterInstance.PermittedInstallers = new List<Installer>();
    context.MasterInstances.Attach(masterInstance);
    masterInstance.PermittedInstallers.Add(installer);
    installer.PermittedMasterInstances.Add(masterInstance);
}

EF代码优先-添加多对多记录时,不会保存任何内容

好吧,问题是我没有将安装程序对象附加到上下文。。。

这项工作:

var installer = installerModel.Installer;
context.Installers.Attach(installer);
foreach (var permittedMasterInstanceId in installerModel.SelectedMasterInstances)
{
    if (!installer.PermittedMasterInstances.Any(pmi => pmi.MasterInstanceId == permittedMasterInstanceId))
    {
        var masterInstance = new MasterInstance {MasterInstanceId = permittedMasterInstanceId};
        context.MasterInstances.Attach(masterInstance);
        installer.PermittedMasterInstances.Add(masterInstance);
    }
}
相关文章: