【问题标题】:Update 2 tables from Edit Action (ViewModel).从 Edit Action (ViewModel) 更新 2 个表。
【发布时间】:2016-12-13 13:23:56
【问题描述】:

我想先说声对不起,因为我是这门编程语言的新手,如果我说错话或做错了什么,请原谅我。

我创建了一个包含 3 个类库的项目(其中 1 个包含来自 sql server 的表)。我根据来自“http://tutlane.com/tutorial/aspnet-mvc/how-to-use-viewmodel-in-asp-net-mvc-with-example”的教程制作了一个 ViewModel,现在我希望能够更新这些表中的数据,但我不知道如何。我试图做某事,但失败了。 `命名空间 BOL2.ViewModel { 公共课 NIRIO { [钥匙] 公共 int ID { 获取;放; } 公共 int 编号 { 获取;放; } 公共可空日期{获取;放; }

    public int NirID { get; set; }
    [DisplayName("TypeID")]
    public int TipID { get; set; }
    public int SupplierID { get; set; }
    public int ProductID { get; set; }
    public Nullable<System.DateTime> EntryDate { get; set; }
    public Nullable<System.DateTime> ExitDate { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
    public decimal Total { get; set; }


    public BOL2.tbl_NIR tbnir;
    public BOL2.tbl_I_O tblio { get; set; }`

这是我的视图模型。它包含来自这 2 个表的数据(tbl_NIR,前 3 个,其他来自 tbl_I_O。我在研究中看到他们有一个存储库类,但我现在不应该为 viewmodel 做另一个类,或者我想使用我已经拥有的 2?非常感谢任何帮助。

【问题讨论】:

  • 我找到了这个问题的答案,所以这个话题现在已经解决了。在另一个表的编辑控制器中添加:“tbl_I_O oi = db.tbl_I_O.Where(x => x.NirID == id).First();”在 HttpGet 中。这个答案适用于像我这样如何在没有 viewmodel 的情况下使用 ADO.net Model 数据库的人。希望对您有帮助,对任何拼写错误表示抱歉。

标签: sql-server entity-framework model-view-controller


【解决方案1】:
You could do something similar to this.
public void UpdateCar(CarViewModel viewModel)
{
    using (DataContext context = new DataContext())
    {
        CarEntity dataModel = context.CarEntities.where(x => x.Id == viewModel.Id).First();

        dataModel.Name = viewModel.Name;
        dataModel.Type = viewModel.Type;

        context.SaveChanges();
    }
}

You need to create your model objects from your view model and set the values for the models.

【讨论】:

  • 我看到了这方面的参考,但它不起作用。我将模型放在项目的不同部分(BOL2 - 类库)。该库包含我数据库中每个表的模型。我的问题是是否可以在没有存储库的情况下进行更新操作,因为我已经为这 2 个单独的存储库?我是编程新手,所以如果你能简单解释一下,我可以理解。对不起我的英语不好。
  • 如果您能分享更多详细信息,我会很容易向您解释。
  • 详细信息,例如您用于模型的库。您如何使用您的存储库,以及为使用存储库而设计的工作流程是什么。您也可以在没有存储库的情况下进行更新,但从项目和框架的角度来看它是没有用的
  • 我有包含每个表的模型的类库 BOL2。然后我有 2 个包含存储库数据的其他类库。像 public IEnumerable GetALL() { return db.tbl_NIR.ToList(); } public tbl_NIR GetByID(int Id) { return db.tbl_NIR.Find(Id); } 公共无效更新(tbl_NIR nir){ db.Entry(nir).State = System.Data.Entity.EntityState.Modified; } public void Save() { db.SaveChanges(); }
  • 这是来自 DAL2 类库,我在 BLL2 中有另一个包含类似 public private NirDb objDb 的东西;公共 NirBs() { objDb = 新 NirDb(); }IEnumerable GetALL() { return objDb.GetALL(); } public BOL2.tbl_NIR GetByID(int Id) { return objDb.GetByID(Id); } 公共无效更新(BOL2.tbl_NIR nir){ objDb.Update(nir); }
【解决方案2】:

我不太确定您使用的方法是什么,但没有奏效。以防万一您尝试通过视图更新表,则不能这样做。因为你有加入 inform IT explanation 我建议您在数据库中创建一个存储过程。然后通过代码调用该过程。它既安全又快速。 explained here

【讨论】:

  • 这部分代码我用于更新,但如果我必须为 viewmodel 做一个存储库,或者我应该只使用我已经拥有的 2,table1 和 table2,我会徘徊?
  • //Get public actionresult Update(int?id){var nir = (from n in db.tbl_NIR join oi in db.tbl_I_O on n.ID 等于 oi.NirID where n.ID == id select new {ID = n.ID, Number = n.Number, 其他值, }).First(); var nirio = new BOL2.ViewModel.NIRIO(); {nirio.ID = nir.ID; nirio.Number = nir.Number;其他值;返回视图(nirio);}
  • //发布公共 ActionResult Update(BOL2.ViewModel.NIRIO nirio){if(!ModelState.IsValid){return View(nirio);}tbl_NIR n=new tbl_NIR(){ID = nirio. tbnir.ID,Number=nirio.tbnir.Number,Date=nirio.tbnir.Date}; db.tbl_NIR.Attach(n); db.Entry(n).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); // tbl_I_O 也一样,返回 RedirectToAction("Index");}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
  • 2020-07-18
相关资源
最近更新 更多