繁体   English   中英

如何使用 asp.net mvc 在您的 DbContext 中使用多个 model?

[英]How to use more than one model in your DbContext using asp.net mvc?

我有一个数据访问层(类并有表定义)。 每次我想使用视图保存它。 它会将所有对象存储到表定义中。

我遇到的问题和挑战:我想弄清楚当使用超过 3 个模型指向DbContext时,以保存字段表单? 任何曾经做过类似任务的人,如果如此,请分享你的想法。 我错过了什么? 不保存它看到的字段的表单 (TbTrainingRegForm) 表定义已更改。

楷模:

namespace eNtsaRegistrationTraining.Models
{
    public class TrainingRegForm
    {
        [Key]
        public Guid? Id { get; set; }
        public string Title { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Position { get; set; }
        public string Company { get; set; }

        public string StreetAddress { get; set; }

        public string StreetAddressLine { get; set; }

        public string City { get; set; }
        public string StateProvince { get; set; }

        public int ZipCode { get; set; }

        public string Email { get; set; }

        [Required(ErrorMessage = "This field is required")]
        [DataType(DataType.PhoneNumber)]
        public string CellNumber { get; set; }
        public string DietaryRequirement { get; set; }
    }

    public class RegViewAndRoleViewModel
    {
        public DietViewModel DietMain { get; set; }

        public TrainingRegForm RegForm { get; set; }

        public DropDownViewModel ListCountries { get; set; }
        public RegistrationTrainingForm HomeModel { get; set; }
        public RoleViewModel RoleViewModelData { get; set; }
    }

获取 function:

// GET:TrainingRegForm/Create/WebRequest.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SubmitRegDetails([Bind(Include= "Id, Title, FirstName, LastName, Position, Company, StreetAddress, StreetAddressLine, City, StateProvince, ZipCode,Email, CellNumber, DietaryRequirement")]TrainingRegForm eNtsaTraining)
{
    if(ModelState.IsValid)
    {
        eNtsaTraining.Id = Guid.NewGuid();
        db.TrainingRegs.Add(eNtsaTraining);
        db.SaveChanges();
        return RedirectToAction("SaveRegForm");
    }

    // Validates when empty.
    if(ModelState.IsValid)
    {
        return RedirectToAction("SaveRegForm");
    }

    return View(eNtsaTraining);
}

看法:

@using eNtsaRegistrationTraining.Models
@model RegViewAndRoleViewModel
@{
    ViewBag.Title = "SubmitRegDetails";
}
<div>

<div class="form-group">
                            <div class="col-md-offset-2 col-md-10">
                                <input type="submit" value="Submit" class="btn btn-primary" />

                            </div>
                        </div>
                @Html.ActionLink("Back to list", "SaveRegForm")
            </div>

既然你提到你得到:

“System.InvalidOperationException:'支持 'eNtsaRegistration' 上下文的 model 自数据库创建以来已更改。考虑使用 Code First 迁移更新数据库 (go.microsoft.com/fwlink/?LinkId=238269)。'”

您需要在 Visual Studio 的 Package 管理器控制台中执行以下命令:

  1. Add-Migration {name}
  2. Update-Database

当您的实体模型更改而支持数据库尚未更新时,就会发生这种情况。

或者,您可以启用自动迁移,这样您就不必在开发期间为每个 model 更改执行此操作。 有关详细信息,请参阅下面的参考资料。

enable-migrations –EnableAutomaticMigration:$true

参考:

Entity Framework 6 中基于代码的迁移 Entity Framework 6 中的自动迁移

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM