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

时间:2015-02-15 19:06:21

标签: asp.net-mvc entity-framework

ASP.NET MVC5 Entity Framework项目中,我有两个表AccountAccountDetailAccountDetail Account引用),两个对应模型AccountModelAccountDetailModel

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

2 个答案:

答案 0 :(得分:2)

您可以关联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();
    }
}

如果要更新记录,如果应插入或更新相关详细记录,则需要检查一些代码。

答案 1 :(得分:0)

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

这样的类
public class RegistrationViewModel
{
    public AcountModel AcountModel { get; set; }
    public AcountDetailModel AcountDetailModel { get; set; }
}

并将此类用于viewmodel