我正在尝试在Webgrid的MVC Web应用程序中执行CURD操作,但是问题是我有多个表,但不知道如何通过使用多个表来执行EDIT操作。

发票表

public Invoice()
{
    this.LineItems = new HashSet<LineItem>();
}

public int Customer_ID { get; set; }
public string Customer_name { get; set; }
public string Customer_Address { get; set; }
public virtual ICollection<LineItem> LineItems { get; set; }


产品表

public Produc()
{
    this.LineItems = new HashSet<LineItem>();
}

public int Product_ID { get; set; }
public string Product_name { get; set; }
public int Unit_Price { get; set; }
public virtual ICollection<LineItem> LineItems { get; set; }


LineItems表

public partial class LineItem
{
    public int Customer_ID { get; set; }
    public int LineItems_ID { get; set; }
    public int Product_ID { get; set; }
    public int Quantity { get; set; }
    public int Total { get; set; }

    public virtual Invoice Invoice { get; set; }
    public virtual Produc Produc { get; set; }
}


视图模型

public class ViewModel
{
    public string Customer_name { get; set; }
    public string Customer_Address { get; set; }
    public int Quantity { get; set; }
    public int Total { get; set; }
    public string Product_name { get; set; }
    public int Unit_Price { get; set; }
}


这是一个将为我执行CURD操作的课程

public class Class1
{
    SalesOrderEntities entities = new SalesOrderEntities();

    public bool SaveStudent(ViewModel viewModel)
    {
        try
        {
            var Invoice = new Invoice()
            {
                Customer_name = viewModel.Customer_name,
                Customer_Address = viewModel.Customer_Address
            };
            var LineItem = new LineItem()
            {
                Quantity = viewModel.Quantity,
                Total = viewModel.Total
            };
            var Produc = new Produc()
            {
                Product_name=viewModel.Product_name,
                Unit_Price=viewModel.Unit_Price
            };
            return true;
        }
        catch
        {

            return false;
        }

    }

    public bool UpdateStudent()
    {
        try
        {

        }
        catch (Exception)
        {

            throw;
        }

    }


现在,这里有问题,我不知道如何执行编辑功能。

最佳答案

使用Entity Framework进行更新可以很简单,因为默认情况下它支持更改跟踪。更改跟踪将使EF一旦被拉动,EF即可自动管理您的实体发生的任何更改,因此,当您调用SaveChanges()时,这些相同的更改将在数据库级别进行。

添加新实体的示例

由于已经有了数据上下文,因此在创建新实体时,只需确保将它们正确添加到上下文中,然后保存更改即可:

// Add each of your new entities to their appropriate table in the context and then save
// your changes
entities.Invoices.Add(new Invoice(){
    Customer_name = viewModel.Customer_name,
    Customer_Address = viewModel.Customer_Address
});
entities.LineItems.Add(new LineItem(){
    Quantity = viewModel.Quantity,
    Total = viewModel.Total
});
entities.Producs.Add(new Produc(){
    Product_name = viewModel.Product_name,
    Unit_Price = viewModel.Unit_Price
});
// Now save your changes
entities.SaveChanges();


更新现有实体的示例

更新基本上以相同的方式进行,但是您将需要访问标识符,以便可以查询现有实体,进行更改并保存它们:

public ActionResult UpdateStudent(int studentId)
{
     using(var entities = new SalesOrderEntities())
     {
          // Get your student
          var student = entities.Students.FirstOrDefault(s => s.StudentID == studentId);
          if(student == null)
          {
               // Student wasn't found
               return HttpNotFound();
          }
          // Create a view with the existing student data
          return View(student);
     }

}

[HttpPost]
public bool UpdateStudent(UpdateStudentViewModel viewModel)
{
     try
     {
         using(var entities = new SalesOrderEntities())
         {
              // Retrieve your existing student (or other entities)
              var existingStudent = entities.Students.FirstOrDefault(s => s.StudentID == viewModel.StudentID);
              // Now that you have your entity, update the appropriate properties
              existingStudent.Property = viewModel.Property;
              // Then finally save your changes
              entities.SaveChanges();
         }
     }
     catch(Exception ex)
     {
         // Something went wrong updating the user
     }
}

关于c# - 如何使用ViewModel模式在MVC中编辑多个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37657331/

10-11 04:20