【问题标题】:insert data in many-to-many relationship in Entity Framework在实体框架中以多对多关系插入数据
【发布时间】:2015-01-09 16:04:10
【问题描述】:

我在两个表之间存在多对可能的关系,该关系通过在两者之间引入另一个表而中断,其中包含两者的主键。

这是我的模型类

Navigation_Functions

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 表中,其中函数和控制器记录同时创建。 ??????????????????????????????????????????

我正在阅读博客 Insert/Update Many to Many Entity Framework . How do I do it?,但我很难理解如何使用我的结构插入数据。

?????????

    public void CreateFunctionNavigation(FunctionsNavigation_ViewModel _obj)
    {

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

            }
            catch
            {

            }
        }
    }

我的视图模型

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

    public Navigation_FunctionController _Navigation_FunctionController { get; set; }
}

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

【问题讨论】:

    标签: c# .net asp.net-mvc linq entity-framework


    【解决方案1】:

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

    Navigation_Functions 模型应该具有外部实体而不是连接表的属性,正如您提供的链接中所建议的那样,您不要映射连接表,因为实体框架会为您处理这个问题:

    这个

    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
            }
        }
    }
    

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

    【讨论】:

    • 非常感谢...我现在就试试,希望能成功
    • navigation_controller 是否也应该被赋值给 navigation_function ... 因为我在调试中看到这个 null ?????
    • 由于它是多对多关系,您应该只需要在一侧保存关系,但是我已经添加了一个更新(更新开始 - 更新结束)关于如何在双方执行此操作如果你愿意。您是先使用数据库还是先使用代码?
    • 我有调试代码....并将屏幕截图放在我的问题中...我正在努力将数据保存在数据库中。我的 viewModel 是否正确???
    • 您的视图模型不会对您的数据库模型产生任何影响,您正在使用它从 UI 传输数据。 Navigation_FunctionController 具有 null Navigation_Functions 对象这一事实并不重要,因为您已经在关系的另一端添加了引用。你现在的数据库模式是什么样的?尝试保存时是否遇到任何错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多