繁体   English   中英

在Entity Framework中以多对多关系插入数据

[英]insert data in many-to-many relationship in Entity Framework

我在两个表之间建立了多对五的关系,方法是在两个表之间引入另一个表,其中包含两个表的主键。

在此处输入图片说明

这是我的模特班

导航功能

public class Navigation_Functions
{
    public Navigation_Functions()
    {

    }
    [Key]
    public int Function_ID { get; set; }

    [StringLength(250)]
    [Required(ErrorMessage = "Required Title")]
    [Display(Name = "Function Title")]
    public string FunctionName { get; set; }

    [Required(ErrorMessage = "Required Hierarchy Level")]
    [Display(Name = "Hierarchy Level")]
    public int Hierarchy_Level { get; set; }

    public ICollection<Navigation_FunctionHierarchy> Navigation_FunctionHierarchy { get; set; }
    public ICollection<Navigation_FunctionInAction> Navigation_FunctionInAction { get; set; }
    public ICollection<Navigation_FunctionInController> Navigation_FunctionInController { get; set; }
}

Navigation_FunctionController模型

 public class Navigation_FunctionController
{
    public Navigation_FunctionController()
    {

    }

    [Key]
    public int ControllerID { get; set; }

    [StringLength(250)]
    [Required]
    public string ControllerName { get; set; }

    public ICollection<Navigation_FunctionAction> Navigation_FunctionAction { get; set; }
    public ICollection<Navigation_FunctionInController> Navigation_FunctionInController { get; set; }

}

Navigation_FunctionInController模型

  public Navigation_FunctionInController() 
    { 

    }

    [Key]
    public int FunctionInController_ID { get; set; }
    public int Function_ID { get; set; }
    public int ControllerID { get; set; }

    public Navigation_FunctionController Navigation_FunctionController { get; set; }
    public Navigation_Functions Navigation_Functions { get; set; }

}

我有用于CRUD操作的通用存储库

public void InsertEntity(TEntity obj)
    {
        _DbSet.Add(obj);
    }

现在,我有一个类负责通过调用通用存储库并通过数据传递对象来插入数据,我正在努力插入数据,就像我将两个表的主表插入到Navigation_FunctionInController表中一样,在该表中同时创建了Function和Controller记录。 ??????????????????????????????????????????

我正在阅读博客插入/更新多对多实体框架。 我该怎么做? 但是我很努力地了解如何在结构中插入数据。

?????????

    public void CreateFunctionNavigation(FunctionsNavigation_ViewModel _obj)
    {

        using(var _uow = new FunctionsNavigation_UnitOfWork())
        {
            try
            {
                 ??????????????????????

            }
            catch
            {

            }
        }
    }

我的ViewModel

public class FunctionsNavigation_ViewModel 
{
    public Navigation_Functions _Navigation_Functions { get; set; }

    public Navigation_FunctionController _Navigation_FunctionController { get; set; }
}

我已经按照建议更新了模型,但是仍然无法将数据保存在数据库中,以下是调试代码的屏幕截图。

在此处输入图片说明

据我所知,您在Navigation_Functions和Navigation_FunctionController之间存在多对多关系。

Navigation_Functions模型应该具有外部实体的属性,而不是联接表的属性,如您提供的链接中所建议的那样,您不映射联接表,因为Entity Framework会为您解决此问题:

这个

public ICollection<Navigation_FunctionInController> Navigation_FunctionInController { get; set; }

应该

public ICollection<Navigation_FunctionController> Navigation_FunctionController { get; set; }

然后,当您保存视图模型时,它将类似于:

public void CreateFunctionNavigation(FunctionsNavigation_ViewModel _obj)
{
    using(var _uow = new FunctionsNavigation_UnitOfWork())
    {
        try
        {
            // UPDATE START
            _obj._Navigation_FunctionController.Navigation_Functions = new List<Navigation_Functions>();
            _obj._Navigation_FunctionController.Navigation_Functions.Add(_obj._Navigation_Functions);
            // UPDATE END

            var navigationFunctions = _obj._Navigation_Functions;
            navigationFunctions.Navigation_FunctionController = new List<Navigation_FunctionController>();
            navigationFunctions.Navigation_FunctionController.Add(_obj._Navigation_FunctionController);

            _uow.Entities.Add(navigationFunctions);
            _uow.Save();
        }
        catch
        {
            // Log exception
        }
    }
}

请记住,我尚未测试此代码,因此您可能必须更新语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM