C# 无法在表中插入标识列的显式值<;实体>;当IDENTITY_INSERT设置为OFF时。
我已经阅读了stack overflow推荐给我的每一篇文章,但还没有解决我的问题。这是我的第一篇文章,如果这是一个简单的修复,我道歉,但不管我先保存什么(后冷器、F1046或BasicInfo,我在显式插入后冷器的标识时遇到异常。BasicInfo自己保存很好,但在添加F1046、保存它或添加后冷器并保存它时,我遇到此异常。后冷器和F1046应为1对1,F1046和BasicInfo应为一对多关系 实体:C# 无法在表中插入标识列的显式值<;实体>;当IDENTITY_INSERT设置为OFF时。,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我已经阅读了stack overflow推荐给我的每一篇文章,但还没有解决我的问题。这是我的第一篇文章,如果这是一个简单的修复,我道歉,但不管我先保存什么(后冷器、F1046或BasicInfo,我在显式插入后冷器的标识时遇到异常。BasicInfo自己保存很好,但在添加F1046、保存它或添加后冷器并保存它时,我遇到此异常。后冷器和F1046应为1对1,F1046和BasicInfo应为一对多关系 实体: [MetadataType(typeof(F1046MetaDataSource))]
[MetadataType(typeof(F1046MetaDataSource))]
public partial class F1046
{
public int F1046Id { get; set; }
public virtual AfterCooler AfterCooler { get; set; }
public int BasicInfoId { get; set; }
public virtual BasicInfo BasicInfo { get; set; }
}
class F1046MetaDataSource
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int F1046Id { get; set; }
[ForeignKey("BasicInfo")]
public int BasicInfoId { get; set; }
}
[MetadataType(typeof(AfterCoolerMetaDataSource))]
public partial class AfterCooler : IComparer<AfterCooler>
{
public string AfCoolReasonChange { get; set; }
public string VendorAF { get; set; }
public int F1046Id { get; set; }
public virtual F1046 F1046 { get; set; }
}
class AfterCoolerMetaDataSource
{
[Key,ForeignKey("F1046")]
public int F1046Id { get; set; }
}
[MetadataType(typeof(BasicInfoMetaDataSource))]
public partial class BasicInfo
{
public int BasicInfoId { get; set; }
public DateTime? DateBasicInfo { get; set; }
...
public virtual ICollection<F1046> F1046 { get; set; }
public BasicInfo()
{
F1046 = new List<F1046>();
}
}
class BasicInfoMetaDataSource
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int BasicInfoId { get; set; }
}
(基本上每个实体看起来都一样,只是交换了上下文/id…)
我有一个视图,其中包含基本信息(但不是id)和F1046(但不是id)的元素,F1046的成员(后冷器、其属性等)如下:
<div class="form-group">
@Html.Label("After Cooler Reason")
@Html.EditorFor(x => Model.F1046.AfterCooler.AfCoolReasonChange, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => Model.F1046.AfterCooler.AfCoolReasonChange, "", new { @class = "text-danger" })
</div>
我已经尝试了每一个顺序,或者至少感觉是这样的。如果这没有多大意义,我很抱歉,这个程序需要很多字段,我试图忽略不相关的字段。上面提到的控制器方法的ViewModel包含一个BasicInfo对象和一个F1046对象。
谢谢。“F1046”…我甚至不想继续阅读。不过,说真的,请在调用之前查看对象。添加并确保对象的Id为null/negative我为命名约定道歉,但后冷器的pk/fk为0,但我应该采取什么步骤使其成为所需的值?(null或其父Id)?
<div class="form-group">
@Html.Label("After Cooler Reason")
@Html.EditorFor(x => Model.F1046.AfterCooler.AfCoolReasonChange, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => Model.F1046.AfterCooler.AfCoolReasonChange, "", new { @class = "text-danger" })
</div>
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateF1046(F1046_CreateViewModel fm)
{
if (ModelState.IsValid)
{
BasicInfo bi = fm.BasicInfo;
F1046 f1 = fm.F1046;
_f1046Repository.SaveF10461(f1);
bi.F1046.Add(f1);
return RedirectToAction("Summary", bi);
}