C# 在MVC中过帐到多个表时没有ID
我试图在我的应用程序中将数据发布到两个不同的表中。这些表格如下 表AC# 在MVC中过帐到多个表时没有ID,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我试图在我的应用程序中将数据发布到两个不同的表中。这些表格如下 表A the_vessel vessel_idx int vessel_name varchar vessel_imono decimal 表B the_vessel_spec vessel_spec_idx int vessel_parent_id int vessel_bhp decimal 您会注意到在表B中有一个名为“Vesser\u parent\u id”的列
the_vessel
vessel_idx int
vessel_name varchar
vessel_imono decimal
表B
the_vessel_spec
vessel_spec_idx int
vessel_parent_id int
vessel_bhp decimal
您会注意到在表B中有一个名为“Vesser\u parent\u id”的列,用于保存来自“the\u Vesser”的PK“Vesser\u idx”,以便可以关联数据
我遇到的问题是,当我发布数据时,表A中“Vesser_idx”的ID没有发布到表B“Vesser_parent_ID”。我以前有这个工作,但由于某种原因,它拒绝工作,现在我需要一些帮助。也许我的方法是错误的,或者我没有考虑到一些问题
下面是我在控制器中为上述表创建的方法
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(FullVesselViewModel model)
{
var the_vessel = new tbl_vessels
{
vessel_name = model.vessel_name,
vessel_imono = model.vessel_imono
};
var the_vessel_spec = new tbl_vessel_spec
{
vessel_bhp = model.vessel_bhp
parent_id = model.vessel_idx
};
using (var context = new seabrokersEntities())
{
context.tbl_vessels.Add(the_vessel);
the_vessel_spec.vessel_spec_idx = the_vessel.vessel_idx;
context.tbl_vessel_spec.Add(the_vessel_spec);
context.SaveChanges();
}
return View("Index");
}
下面是我为此创建的ViewModel
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using MyProject.Models;
namespace MyProject.ViewModels
{
public class FullVesselViewModel
{
public int parent_id { get; set; }
public int vessel_idx { get; set; }
public string vessel_name { get; set; }
public string vessel_imono { get; set; }
public decimal vessel_bhp { get; set; }
}
}
看起来您正在使用EF,所以为了表示实体之间的关系,应该使用导航属性。这对你来说会容易得多 关于你的情况,你应该写如下
public class tbl_vessels {
[Key]
public int vessel_idx { get; set; }
//Navigation property
public IList<the_vessel_spec> the_vessel_specs { get; set; }
}
public class the_vessel_spec {
[Key]
public int vessel_spec_idx { get; set; }
[ForeignKey("vessel_parent")]
public int vessel_parent_id { get; set; }
//Navigation property
public tbl_vessels vessel_parent { get; set; }
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(FullVesselViewModel model)
{
var the_vessel = new tbl_vessels
{
//vessel_name = model.vessel_name,
//vessel_imono = model.vessel_imono,
the_vessel_specs = new List {
new tbl_vessel_spec
{
//vessel_bhp = model.vessel_bhp
//parent_id = model.vessel_idx
}
}
};
using (var context = new seabrokersEntities())
{
context.tbl_vessels.Add(the_vessel);
context.SaveChanges();
}
return View("Index");
}
公共级tbl\U船舶{
[关键]
公共int容器_idx{get;set;}
//导航属性
公共IList容器规格{get;set;}
}
公共类船舶规范{
[关键]
公共int容器\u规范\u idx{get;set;}
[外侨(“船舶母公司”)]
公共int容器\u父\u id{get;set;}
//导航属性
公共tbl_容器容器_父对象{get;set;}
}
[HttpPost]
[ValidateAntiForgeryToken]
公共操作结果创建(FullVesselViewModel模型)
{
var_船舶=新tbl_船舶
{
//船只名称=型号。船只名称,
//Vesser_imono=型号。Vesser_imono,
_容器_规格=新列表{
新tbl_容器规格
{
//船舶压头=型号。船舶压头
//父级\u id=model.vessel\u idx
}
}
};
使用(var context=new seabrokerEntities())
{
上下文。tbl_容器。添加(容器);
SaveChanges();
}
返回视图(“索引”);
}
希望对您有所帮助。谢谢您的回复。我发现索引值为零的原因是表之间缺乏关系,实现这种关系导致代码按预期工作