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和映射.
至于您的实体,为什么不只将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