C# 在MVC中过帐到多个表时没有ID

C# 在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”的列

我试图在我的应用程序中将数据发布到两个不同的表中。这些表格如下

表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\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();
}
返回视图(“索引”);
}

希望对您有所帮助。

谢谢您的回复。我发现索引值为零的原因是表之间缺乏关系,实现这种关系导致代码按预期工作