Asp.net mvc ASP.net MVC-主详细信息-外键始终为零

Asp.net mvc ASP.net MVC-主详细信息-外键始终为零,asp.net-mvc,entity-framework,master-detail,Asp.net Mvc,Entity Framework,Master Detail,我是MVC新手,尝试在主详细信息表单中添加/编辑记录。masterid和detailid都是oracle在插入记录时生成的。因此,当我尝试调用DBContext.SaveChanges()时,我得到一个错误,即违反了外键,并且找不到id为“0”的主行 下面是课程描述 public class Master { public int MasterID { get; set; } public string MasterTitle { get; set; } public v

我是MVC新手,尝试在主详细信息表单中添加/编辑记录。masterid和detailid都是oracle在插入记录时生成的。因此,当我尝试调用DBContext.SaveChanges()时,我得到一个错误,即违反了外键,并且找不到id为“0”的主行

下面是课程描述

public class Master
{
    public int MasterID { get; set; }
    public string MasterTitle { get; set; }
    public virtual IList<Detail> Details { get; set; }
}

public class Detail
{
    public int DetailID { get; set; }
    public int MasterID { get; set; }

    public string DetailName { get; set; }
    public virtual Master Master { get; set; }
}
只有在将记录插入数据库后,主键(masterid)才会获得有意义的值。此时,context.SaveChanges()也尝试使用“0”主ID保存客户端记录。我到处找,找不到任何有用的东西

虽然我只是先保存主表,这样我就可以检索主ID,并使用细节模型对其进行处理。然而,我在任何地方都找不到如何使用EF5 MVC ASP.NET实现这一点 有人能给我指出正确的方向,并提供一些工作样品吗? 谢谢
Siddhant

如果您在Create方法上设置了断点,并且在主对象中获得了正确的列表,则Oracle提供程序可能存在问题

作为一种解决方法,您可以尝试更改方法签名以接受数据,如下所示:

public ActionResult Create(MASTER masterrecord, List<Detail> details)
public ActionResult创建(主记录,列表详细信息)
然后您可以先保存
主记录
,然后添加详细信息并再次保存。这不是最优的,但可能有效


侧注:将ILILT更改为Eclipse。

,您可能需要考虑使用GUID而不是用于您的PK的Its。然后在Master的构造函数中,可以说

MasterID=Guid.NewGuid()。这样,您就不必点击数据库来查找下一个ID


这里有一个赞成和反对的列表

与SQLExpress配合良好我正在使用Oracle。如果PK列(在我的示例中是MASTERID)为=0thanks,那么PK是根据我在行插入触发器之前使用的序列加上检查条件生成的。对于我的应用程序来说,使用GUID似乎是正确的前进方式。我不担心oracle使用GUI的性能,因为我不希望每年超过几千条记录。但是,MVC/EF5应该有办法处理这种情况,你不这么认为吗?
public ActionResult Create(MASTER masterrecord, List<Detail> details)