【问题标题】:Hierarchical data representation using entity framework in MVC在 MVC 中使用实体框架的分层数据表示
【发布时间】:2013-02-08 06:44:53
【问题描述】:

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

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

现在我想知道使用此模型执行插入的方式是什么。 如果我想插入一个带有某个父项的新条目,我需要这样做吗:

[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");
}

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

【问题讨论】:

  • 我猜“DomainEntity”中必须有“ParentEntityID”字段?
  • 存在但 asp.net 实体框架将其转换为 parentEntity 和子实体的关联.. 我无法访问我将设置为可空 int 的父实体 id 的 int 值
  • 在 EF 中导入表时有一个选项可用。 “在模型中包含外键列”。确保必须选中它才能看到此字段。
  • 在哪里可以找到这个选项?是在我创建 EDMX 方案的时候吗?
  • 当您将数据库中的表导入其中时不会。

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


【解决方案1】:

不需要找到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 不为空,则删除?标记使其成为不可空类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多