EntityFramework MVC从一个视图创建多个不同的实体

时间:2014-09-25 21:02:51

标签: c# asp.net-mvc entity-framework razor database-connection

我正在开发一个EntityFramework项目并遇到一个有趣的问题。我想要做的是使用视图创建一个数据库实体,但为了做到这一点,我需要创建另一个与第一个实体需要关联的不同类型的数据库实体,我正在尝试从相同的观点。

例如,我们有一个人,每个人都会有一个定期约会。但是,约会可以在不同类型的标准上重复出现。现在我正试图让这个工作在每天的约会(例如,每周一,周三和周五),所以在这里,我的模型是这样的:

DailyAppointment实现抽象类AppointmentFrequency

人有一个与之相关的约会频率。以下是我的模型背后的代码(使用代码优先迁移生成的数据库)。

AppointmentFrequency:

public abstract class AppointmentFrequency 
{
    [KeyAttribute]
    public int Identity { get; set; }
}

DailyAppointment:

public class DailyAppointment : AppointmentFrequency
{
    public bool Monday { get; set; }
    // ... Variable for each day of the week.
}

人:

public class Person
{
    [Key]
    public int Identity { get; set; }

    //... Other information

    [ForeignKey("AppointmentFrequency_Identity")]
    public virtual AppointmentFrequency AppointmentFrequency { get; set; }

    public int? AppointmentFrequency_Identity { get; set; }
}

因此,在我们看来,当我们创建一个Person时,我们希望与它们关联一个AppointmentFrequency。

目前,我的方法涉及视图内部创建Person的部分视图:

    @using (Html.BeginForm("AddPerson", "ControllerName", FormMethod.Post, new { role = "form", @class = "form-inline" }))
{
    ... //This is where we get information about the Person

    Model.Person.AppointmentFrequency = new DailyAppointment();
    var dailyAppointment = Model.Person.AppointmentFrequency as DailyAppointment;
    if (dailyFrequency != null)
    {
        @Html.Partial("_DailyAppointmentEditor", Model.Person.AppointmentFrequency as DailyAppointment);
    }

    <div class="form-group">
      <button class="btn btn-primary" type="submit">Add</button>
    </div>
  }

(我也尝试过一些类似的方法,比如将dailyAppointment变量发送到局部视图中)

我的部分视图如下:

@model Database.Entities.DailyAppointment


        @Html.LabelFor(model => model.Monday)
        @Html.CheckBoxFor(model => model.Monday, new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.Monday, null, new { @class = "text-danger" })

        @Html.LabelFor(model => model.Tuesday)
        @Html.CheckBoxFor(model => model.Tuesday, new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.Tuesday, null, new { @class = "text-danger" })

        ... //The rest of the days and script bundling

在我的控制器中,我只创建一个Person,并且希望框架可以创建约会,但似乎并非如此。

    [HttpPost]
    public ActionResult AddPerson(Person person){
        this.db.People.AddOrUpdate(person);
        this.db.SaveChanges();
        return this.View();
    }

我知道这样做的一种方法是收集数据,然后在发送到控制器的表单中使用它,创建频率,然后添加对person对象的引用并在数据库中创建它。我实际上已经做到了,并且知道它有效,但我觉得必须有更友好的方式在框架内这样做。

这里的部分挑战是我希望在使用相同设计的同时使其具有可扩展性。如果我能提供更多信息,请告诉我,但如果您对此方法有任何建议或我采取不同的方法,我将不胜感激!谢谢。

0 个答案:

没有答案