使用C#将数据插入MVC 4.5中的多个表

时间:2017-11-27 06:05:08

标签: c# asp.net-mvc-4 model

我有这些模型

public class employee
{
    public int Empid {get;set;}
    public string name {get;set;}
    public string fname{get;set;}
}
public class empLanguage
{
    public string language { get; set; }
    public string speaking{ get; set; }
}
public class EmpInsertion
{
    public string name { get; set; }
    public string fname { get; set; }
    public List<ViewModels.Employee.empLanguage> EmpLangs { get; set; }
}

我有这个控制器

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Insert(EmpInsertion empins)
{
    if (ModelState.IsValid)
    {
        Employee Emp = new Employee();
        Emp.name= empins.name;
        Emp.fname= empins.fname;
        var MaxID = (from emp in db.Employees select emp.EmployeeID).Max();
        EmpLanguage objlng = new EmpLanguage();
        objlng.EmployeeID = MaxID;
        foreach (var emplang in Emp.EmpLanguages.ToList())
        {
            empLanguage lng = new empLanguage();
            emplang.Language = lng.language;
            emplang.Speaking = lng.speaking;
            empins.EmpLangs.Add(lng);
        }
    }
}

我有两个表Employee(id,name,fname)语言(id,language,speak,empid)它有一对多的关系,每个员工可以同时说多种语言。 我想从一个视图添加两个表中的数据,如何向一个员工添加多种语言

2 个答案:

答案 0 :(得分:0)

我认为你可以做这样的事情。

public Employee CreatePartnerWithUser(Employee employee, List<Language> language)
{
    using (DataContext context = new DataContext())
    {
        using (var trans = context.Database.BeginTransaction())
        {
            var insertEmployee = context.Employee.Add(employee);
            context.SaveChanges();

            var insertLanguage = context.Language.AddRange(language);
            context.SaveChanges();

            trans.Commit();
        }
    }
}

答案 1 :(得分:0)

如果使用DbContext和EF改变你的模型:

public class employee
{
    public int id {get; set;}
    public string name {get; set;}
    public string fname {get; set;}

    public virtual ICollection<language> language { get; set; }
}

public class language
{
    public int id {get; set;}
    public string languageName {get; set;}

    public virtual ICollection<employee> employee { get; set; }
}

然后在DbContext类中添加此模型构建器以具有多对多关系

        modelBuilder.Entity<employee>()
            .HasMany(e => e.language)
            .WithMany(e => e.employee)
            .Map(m => m.ToTable("employeeLanguage").MapLeftKey("employeeID").MapRightKey("languageID"));

之后,您可以在这样的模型中插入员工:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Insert(employee emp, string langs)
{
    if (ModelState.IsValid)
    {
        using(DbContext db = new DbContext())
        {   
            if(langs != null)
            {
                string[] strLangs = langs.Split('-');
                foreach (var l in strLangs)
                {
                    string lan = l.Trim();
                    while (lan.Contains("  "))
                        lan.Replace("  ", " ");
                    emp.language.Add(new language
                    {
                        languageName = lan
                    });
                }
            }
            db.employee.Add(emp);
            db.SaveChanges();
            return View("YourReturnPage");
        }
    }
    return View(Insert);
}

并在Insert.cshtml文件中添加这段代码:

    <div class="form-group">
        <label for="Title" class="control-label col-md-2">Languages</label>
        <div class="col-md-10">
            <textarea type="text" name="langs" class="form-control" value="@ViewBag.langs"></textarea>
            <p class="help-block text-danger">Separate language keywords with - </p>
        </div>
    </div>