MVC - Insert post data into database

asp.net-mvc c# entity-framework mysql sql

Question

I'm working with MVC and have created a form to insert values into my database.

My database structure has the relationships:

  • One -> Many
  • Many -> Many

For Example: The User table contains a foreign key to the table Company. In my View, I have a dropdownlist which contains all the companies.

What I probably need is a working example of inserting data into tables with foreign keys. I have searched around and tried many solutions but cannot figure out how to make it work.

Here's my code:

Model:

 public class DefaultConnection : DbContext
    {
        public DefaultConnection()
            : base("DefaultConnection")
        {
        }

        public DbSet<User> users{ get; set; }
    }

    public class Company
    {
        public int Id { get; set; }
        public string Name{ get; set; }
    }
public class User
    {
        public int Id { get; set; }

        [ForeignKey("Company")]
        public int Id_Company { get; set; }
        public Company Company{ get; set; }
    }

ViewModel:

public class MyViewModel
    {
        public MyViewModel()
        {
            this.u= new User();
            this.cl = new Companylist();  <== another class which i have create a selectlist
        }

        public User u{ get; set; }
        public Companylist cl{get;set;}
}

View:

<ol>
   <li>
      @Html.LabelFor(m => m.cl.Ncompany)<br />
      @Html.DropDownListFor(o => o.cl.Ncompany, Model.cl.Ncompany, "-- Select --", new { @class = "abc" })
    </li>
    <li>
      @Html.LabelFor(m => m.u.Name)<br />
      <input type="text" name="Name" value="" />
    </li>
</ol>

Controller:

 [HttpPost]
        public ActionResult Create(MyViewModel model)
        {
            if (ModelState.IsValid)
            {
                db.users.Add(model);?????????????????
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(model);
        }
1
3
8/28/2013 5:20:46 PM

Accepted Answer

First, it appears that your DropDownListFor is not setup quite right in the sense that the drop down is for User.Id_Company and not for the company list. It most likely should be:

<li>
      @Html.LabelFor(m => m.cl.Ncompany)<br />
      @Html.DropDownListFor(o => o.u.Id_Company, Model.cl.Ncompany, "-- Select --", new { @class = "abc" })
    </li>

Next, in your controller, you can insert directly from the model being returned, but at some point, you are probably going to quit using Domain Models (models of your DB tables) and start to use View Models. With that said, you could add a new user as such:

[HttpPost]
public ActionResult Create(MyViewModel model)
{
    if (ModelState.IsValid)
    {
        var db = new DefaultConnection(); (?? is this what your context is called?)
        db.users.Add(new User{
           Id_Company = model.u.Id_Company, 
           Name = model.u.Name
        });
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(model);
}
7
8/28/2013 5:23:25 PM

Popular Answer

Your ViewModel has a Company and User. You need to match the entity with the database table entity when inserting.

Try doing this:

[HttpPost]
        public ActionResult Create(MyViewModel model)
        {
            if (ModelState.IsValid)
            {
                db.users.Add(model.User);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(model);
        }

Inserting into a table with a foreign key should just be like any other insert. Assuming you have a database row for the company, it should run without a error.

User user = new User
{
    Id_Company = 1
}

db.users.Add(user);
db.SaveChanges();


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow