[英]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 管理器控制台中执行以下命令:
Add-Migration {name}
Update-Database
当您的实体模型更改而支持数据库尚未更新时,就会发生这种情况。
或者,您可以启用自动迁移,这样您就不必在开发期间为每个 model 更改执行此操作。 有关详细信息,请参阅下面的参考资料。
enable-migrations –EnableAutomaticMigration:$true
参考:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.