Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC中基于实体框架的层次化数据表示_C#_Asp.net Mvc_Entity Framework_Linq To Sql_Entity Framework 4 - Fatal编程技术网

C# MVC中基于实体框架的层次化数据表示

C# MVC中基于实体框架的层次化数据表示,c#,asp.net-mvc,entity-framework,linq-to-sql,entity-framework-4,C#,Asp.net Mvc,Entity Framework,Linq To Sql,Entity Framework 4,嘿,我正在尝试在DB优先模式下使用实体框架。 我有一个存储在一个名为“DomainEntities”的表中的Enittes层次结构 当我使用实体框架生成模式时,我得到了如下所示的正确映射 现在我想知道我应该如何使用这个模型执行insert。 如果我想插入具有某个父项的新条目,我是否需要执行所有这些操作: [HttpPost] public ActionResult Create(DomainEntity i_EntityToCreate, int ParentEntityID) { us

嘿,我正在尝试在DB优先模式下使用实体框架。 我有一个存储在一个名为“DomainEntities”的表中的Enittes层次结构

当我使用实体框架生成模式时,我得到了如下所示的正确映射

现在我想知道我应该如何使用这个模型执行insert。 如果我想插入具有某个父项的新条目,我是否需要执行所有这些操作:

[HttpPost]
public ActionResult Create(DomainEntity i_EntityToCreate, int ParentEntityID)
{
    using (var db = new CamelotShiftManagementEntities())
    {
        var parentEntity = db.DomainEntities.Find(ParentEntityID);
        i_EntityToCreate.ParentEntity = parentEntity;
        i_EntityToCreate.EntityTypeID = 1;

        db.DomainEntities.Add(i_EntityToCreate);

        db.SaveChanges();
    }
    return RedirectToAction("Index");
}

这是正确的还是我应该遵循另一种设计来使用实体框架表示实体的层次结构?

不需要找到ParentEntity您可以将ParentEntityID直接用于DomainEntity对象,如需获取模型中的外键列,请勾选将表导入EDMX时,“在模型中包含外键列”

在此之后,请使用以下代码:

[HttpPost]
public ActionResult Create(DomainEntity i_EntityToCreate, int? ParentEntityID)
{
  using (var db = new CamelotShiftManagementEntities())
  {
    i_EntityToCreate.ParentEntityId = ParentEntityID;
    i_EntityToCreate.EntityTypeID = 1;

    db.DomainEntities.Add(i_EntityToCreate);

    db.SaveChanges();
  }

  return RedirectToAction("Index");

}

如果ParentEntityID不为null,则删除?标记,使其成为不可为null的类型。

我猜“DomainEntity”中必须有“ParentEntityID”字段“?只有asp.net实体框架将其转换为父实体和子实体的关联。”。。我无法访问父实体id的int值,我将其设置为可为null的int。在EF中导入表时,有一个选项可用。“在模型中包含外键列”。确保必须选择该选项才能查看此字段。在哪里可以找到此选项?是在我创建EDMX方案时吗?是在将表从DB导入该方案时。