gpt4 book ai didi

c# - 使用 MVC 3 Entity Framework 代码优先,如何在一对多关系中创建一个新的 "many"对象?

转载 作者:行者123 更新时间:2023-11-30 15:43:08 25 4
gpt4 key购买 nike

我确信这是非常简单的,但是,在搜索网络之后我找不到任何东西可以让我直截了当。

我正在使用 ASP.NET MVC 3 和 Entity Framework 代码优先建模。

我在日历和事件之间有一个简单的一对多关系(对于每个日历,可以有 0 个或多个事件)。

简单地说,我对如何创建/插入与日历关联的新事件感到困惑。

我的实体域定义是:

public class Calendar
{
[Key]
public long id { get; set; }
public string title { get; set; }
public string description { get; set; }
public virtual ICollection<Event> events { get; set; }
} //class

public class Event
{
[Key]
public long id { get; set; }
public string title { get; set; }
public string description { get; set; }
public DateTime startdate { get; set; }
public DateTime enddate { get; set; }
public int importance { get; set; }
} //class

我创建了一个带有“创建新事件”链接的页面,该页面将日历 ID 传递给名为 Create (/localhost:xxxxx/Calendar/Create/1) 的 CalendarController 操作。

我被卡在了代码优先的这一点上,我没有 calendar_id(或类似的东西)作为 Event 类的指定成员来将事件关联到日历。这确实存在于数据库中,因为该列是由代码优先引擎生成的。

我尝试创建一个包含日历 ID 和事件对象的 ViewModel,但是,当我从 Create.cshtml 返回时,日历 ID 从 1 重置为 0,尽管事件信息是有效的。

最后,在一对多关系(如上)中,如何使用日历(单方)创建新事件(多方)?我确信这很简单,我遗漏了一些东西,但我们将不胜感激任何帮助。

/************ ****/

我希望这里有更多细节可以澄清我的问题。

  1. 用户选择一个日历(calendar_id,假设它是 1)。
  2. 在该特定日历的详细信息页面上,有一个指向 Controller /操作 (CalendarController/CreateEvent) 的链接,用于创建与该特定日历关联的新事件。创建的路由为 Calendar/CreateEvent/1(为 id==1 的日历创建一个新事件)。
  3. 在 CreateEvent 操作中,我现在有了新事件的日历实例的 ID。

这就是我感到困惑的地方......

Event 对象没有 calendar_id 数据成员,因为它是由代码优先引擎创建的,所以我没有任何东西可以分配到达路由数据的 calendar_id。

我知道这是一种标准情况,但我遗漏了一些东西。我需要将 calendar_id 保留到 [HttpPost]CreateEvent。从那里,我可以简单地找到合适的日历(使用 calendar_id),从新事件表单(在 CreateEvent.cshtml 中)获取信息来创建一个新事件,然后简单地调用 Calendar.Add(newEvent)。

如何在整个 GET/form/POST 周期中保留 calendar_id(或与此相关的日历)?

再次感谢您的帮助。

/************ ****/我重新尝试了下面提到的可能的解决方案,将虚拟 Calendar 和 CalendarId 添加到 Event 类。我将接受的操作参数更改为 HttpGet 和 HttpPost 函数的事件对象。在 HttpGet 函数中,我将 CalendarId 设置为新事件将添加到的日历的 CalendarId(如上所述,id == 1)。在 CreateEvent View 中一切正常,但是,在返回到 CreateEvent 的 HttpPost 操作时,CalendarId 被重置为 0。

我仍然缺少一些东西......但感谢你的帮助,我仍在寻找那个 Spark 。

最佳答案

在花了一些时间重新思考我的问题并做了更多研究后,我发现了以下信息和解决方案。

首先,一个非常好的教程(有点长,但有很多很好的细节)可在以下网址获得: http://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

本教程不深入,不使用,Ioc,但是,关于 Entity Framework 和代码优先思想的概念非常有帮助。

至于我的解决方案,我做了两件事:1. 按照上面的教程,我在事件类中添加了两个字段。我添加了“long timeline_id”和“virtual Calendar calendar”属性。这为我提供了一个位置来保存传递给 CreateEvent Controller 操作的 timeline_id。虚拟 Calendar 属性提供返回 Calendar 表的导航属性。2. 我已选择使用 CreateCalendar cshtml 表单中的隐藏字段来创建新事件。这允许将 timeline_id 存储在表单中,然后返回到 CreateEvent 操作的 HttpPost 实例。

这解决了我的问题,但是,如果有人有更优雅的解决方案,请告诉我。

关于c# - 使用 MVC 3 Entity Framework 代码优先,如何在一对多关系中创建一个新的 "many"对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7000321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com