ASP.NET MVC5,实体框架如何将数据插入视图中的多个表中



在我的ASP.NET MVC5Entity Framework项目中,我有两个表AccountAccountDetailAccountDetail引用了Account)以及两个相应的模型AccountModelAccountDetailModel

在视图(例如:RegistrationView)中,如何将视图中输入的数据保存到上面的两个表中。因为当右键单击控制器创建RegistrationView时,我只能为其选择一个型号。

您可以链接AccountModelAccountDetailModel,然后使用AccountModel:

public AccountModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IList<AccountDetailModel> Details { get; set; }
}
public AccountDetailModel
{
    public int Id { get; set; }
    public string Description { get; set; }
}

视图中:

@model AccountModel
. . .
@Html.HiddenFor(m => m.Id)
@Html.TextboxFor(m => m.Name)
@for (int i = 0; i < Model.Details.Count; i++)
{
    @Html.HiddenFor(m => m.Details[i].Id)
    @Html.TextboxFor(m => m.Details[i].Description)
}

在行动中,一些代码如下:

[HttpPost]
public ActionView Insert(AccountModel model)
{
    using (var dbContext = new DbContext())
    {
        var account = new Account();
        account.Id = model.Id;
        account.Name = model.Name;
        account.Details = new List<AccountDetail>();
        dbContext.AddObject(account);
        foreach (var modelDetail in model.Details)
        {
            var accountDetail = new AccountDetail();
            accountDetail.Id = modelDetail.Id;
            accountDetail.Description = modelDetail.Description;
            account.Details.Add(accountDetail);
            dbContext.AddObject(accountDetail);
        }
        dbContext.SaveChanges();
    }
}

如果你想更新记录,你需要一些代码来检查是否应该插入或更新相关的详细记录。

我不确定我是否正确理解你,但如果你想让两个模型都在同一个视图中,那么只需创建一个类似的类

public class RegistrationViewModel
{
    public AcountModel AcountModel { get; set; }
    public AcountDetailModel AcountDetailModel { get; set; }
}

并将此类用于视图模型

最新更新