ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-02 10:07:06  阅读:202  来源: 互联网

标签:code-first one-to-many c entity-framework asp-net-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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有