编程语言
首页 > 编程语言> > CodeGo.net> C#-使用MVC 3实体框架代码优先,如何在一对多关系中创建一个新的“许多”对象?

CodeGo.net> C#-使用MVC 3实体框架代码优先,如何在一对多关系中创建一个新的“许多”对象?

作者:互联网

我敢肯定这是非常简单的,但是,在搜寻网之后,我找不到任何可以使我挺直的东西.

我将ASP.NET MVC 3与Entity Framework Code-first建模一起使用.

我在一个日历和一个事件之间有一个简单的一对多关系(每个日历可以有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

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

我现在像代码优先一样被困在这里,我没有将calendar_id(或类似的东西)作为Event类的指定成员来将事件与日历相关联.由于列是由代码优先引擎生成的,因此它确实存在于数据库中.

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

最后,在一对多关系中(如上所述),如何创建带有日历(一侧)的新事件(多个侧)?我敢肯定这很简单,而且我缺少一些东西,但是所有帮助都将不胜感激.

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

这里有一些详细信息,希望对我的问题有所帮助.

>用户选择一个日历(calendar_id,假设它是1).
>在该特定日历的详细信息页面上,有一个指向控制器/动作的链接(CalendarController / CreateEvent),用于创建与该特定日历相关联的新事件.
创建的路由为Calendar / CreateEvent / 1(为id == 1的日历创建一个新事件).
>在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函数的action参数更改为Event对象.在HttpGet函数中,我将CalendarId设置为将要添加新事件的Calendar的CalendarId(如上所述,id == 1).在CreateEvent视图中,一切工作正常,但是,在返回CreateEvent的HttpPost操作时,CalendarId重置为0.

我仍然想念一些东西…但是谢谢您的帮助,我仍在寻找火花.

解决方法:

我通常会做的是,因为我比建立EF Code First语法要熟悉的数据库表结构通常看起来更像表,然后使用EF Power Tools将表反向工程为POCO和映射.

Reverse http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-68-19-metablogapi/3618.ProjectMenu_5F00_thumb_5F00_2E36D883.png

至于您的实体,为什么不只将Calendar属性添加到Event类中

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

    public virtual Calendar Calendar { get; set; }
    public int CalendarId { get; set; }
} //class

标签:code-first,one-to-many,c,entity-framework,asp-net-mvc-3
来源: https://codeday.me/bug/20191102/1990588.html