当我在TratamientoRealizadoPSIG上创建新的数据库注册时,函数SaveChanges()
会抛出此异常:
保存不公开其关系的外键属性的实体时发生错误。 EntityEntries属性将返回null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常。有关详细信息,请参阅InnerException。
看着它,我找不到错误。
这是实体代码:
public partial class TratamientoRealizadoPSIG
{
[Key, Column(Order = 1)]
public Int32 Id { get; set; }
[Required]
public DateTime FechaRealizacion { get; set; }
[Required]
public TimeSpan HoraRealizacion { get; set; }
public DateTime? FechaRegistro { get; set; }
public String Comentario { get; set; }
public String UsuarioRegistro { get; set; }
public virtual String Nombre { get; set; }
public virtual String Motivo { get; set; }
public virtual String Dinamica { get; set; }
public virtual Boolean Asiste { get; set; }
[Required]
[InverseProperty("TratamientoRealizadoPSIG")]
public virtual Equipo Equipo { get; set; }
[Required]
[InverseProperty("TratamientoRealizadoPSIG")]
public virtual Demanda Demanda { get; set; }
[Required]
[InverseProperty("TratamientoRealizadoPSIG")]
public virtual PoblacionObjetivo PoblacionObjetivo { get; set; }
[Required]
[InverseProperty("TratamientoRealizadoPSIG")]
public virtual ObjetivosGrupales ObjetivosGrupales { get; set; }
这是ViewModel:
public partial class CreateTratamientoRealizadoPSIGViewModel
{
// Entity properties
public Int32 Id { get; set; }
[Required]
public DateTime FechaRealizacion { get; set; }
[Required]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh\\:mm\\:ss}")]
public TimeSpan HoraRealizacion { get; set; }
public DateTime? FechaRegistro { get; set; }
public String Comentario { get; set; }
public String UsuarioRegistro { get; set; }
public String Nombre { get; set; }
public String Demanda { get; set; }
public String Motivo { get; set; }
public String ObjetivosGrupales { get; set; }
public String PoblacionObjetivo { get; set; }
public String Dinamica { get; set; }
public Boolean Asiste { get; set; }
[Required]
[Display(Name = "Demanda")]
public int? DemandaId { get; set; }
[Required]
[Display(Name = "ObjetivosGrupales")]
public int? ObjetivosGrupalesId { get; set; }
[Required]
[Display(Name = "PoblacionObjetivo")]
public int? PoblacionObjetivoId { get; set; }
/*
public int? ResultadoTestId { get; set; }
[Required]
[Display(Name="TipoDeTest")]
public int? TipoDeTestId { get; set; }
* */
[Required]
[Display(Name="Equipo")]
public int? EquipoId { get; set; }
public string IdentityDescription { get; set; }
public Boolean? isCreateBack { get; set; }
public string CreateBackUrl { get; set; }
// DropDownList
public List<Demanda> DemandaList { get; set; }
public List<ObjetivosGrupales> ObjetivosGrupalesList { get; set; }
public List<PoblacionObjetivo> PoblacionObjetivoList { get; set; }
public List<Equipo> EquipoList { get; set; }
}
最后执行方法的安全性:
[AcceptVerbs(HttpVerbs.Post)]
public override ActionResult AddTratamientoRealizadoPSIG(int masterId, CreateTratamientoRealizadoPSIGViewModel tratamientoRealizadoPSIGModel)
{
if (ModelState.IsValid)
{
TratamientoRealizadoPSIG tratamientoRealizadoPSIG = new TratamientoRealizadoPSIG();
AutoMapper.Mapper.Map<CreateTratamientoRealizadoPSIGViewModel, TratamientoRealizadoPSIG>(tratamientoRealizadoPSIGModel, tratamientoRealizadoPSIG);
Equipo equipo = _equipoService.Find(tratamientoRealizadoPSIG.Equipo.Id);
**_equipoService.AddTratamientoRealizadoPSIG(equipo, tratamientoRealizadoPSIG, AuthenticatedUser);**
return RedirectToAction("Edit", "Equipo", new { id = masterId });
}
else
{
List<Demanda> allDemanda = _demandaService.FindAll();
List<ObjetivosGrupales> allObjetivosGrupales = _objetivosGrupalesService.FindAll();
List<PoblacionObjetivo> allPoblacionObjetivo = _poblacionObjetivoService.FindAll();
tratamientoRealizadoPSIGModel.DemandaList = allDemanda;
tratamientoRealizadoPSIGModel.ObjetivosGrupalesList = allObjetivosGrupales;
tratamientoRealizadoPSIGModel.PoblacionObjetivoList = allPoblacionObjetivo;
ViewBag.MasterProperty = "Equipo";
ViewBag.MasterId = masterId;
ViewBag.Name = "AddTratamientoRealziadoPSIG";
tratamientoRealizadoPSIGModel.isCreateBack = true;
tratamientoRealizadoPSIGModel.CreateBackUrl = "~/Equipo/Edit/" + masterId;
return View("~/Views/TratamientoRealizadoPSIG/Create.cshtml", tratamientoRealizadoPSIGModel);
}
}
public void AddTratamientoRealizadoPSIG(Equipo equipo, TratamientoRealizadoPSIG tratamiento, Usuario usuario)
{
tratamiento.UsuarioRegistro = usuario.IdentityDescription;
**base.AddTratamientoRealizadoPSIG(equipo, tratamiento);**
}
public virtual void AddTratamientoRealizadoPSIG(Equipo equipo, TratamientoRealizadoPSIG tratamientoRealizadoPSIG)
{
equipo = EntitiesDB.EquipoSet.Find(equipo.Id);
tratamientoRealizadoPSIG.Equipo = equipo;
equipo.TratamientoRealizadoPSIG.Add(tratamientoRealizadoPSIG);
tratamientoRealizadoPSIG.Demanda = EntitiesDB.EntryWithState(tratamientoRealizadoPSIG.Demanda, EntityState.Unchanged);
tratamientoRealizadoPSIG.PoblacionObjetivo = EntitiesDB.EntryWithState(tratamientoRealizadoPSIG.PoblacionObjetivo, EntityState.Unchanged);
tratamientoRealizadoPSIG.ObjetivosGrupales = EntitiesDB.EntryWithState(tratamientoRealizadoPSIG.ObjetivosGrupales, EntityState.Unchanged);
**Change(equipo);**
}
public virtual void Change(Equipo equipo)
{
EntitiesDB.Entry(equipo).State = EntityState.Modified;
**EntitiesDB.SaveChanges();**
}
SaveChanges()
抛出异常。正确创建数据库的关系。
有人能帮助我吗?
问候。
答案 0 :(得分:1)
问题不在于源代码中的实体之间的关系是自己定义的,而是在数据库本身。并没有表明Id会被增加,这是一个愚蠢的错误......但毕竟是错误。解决方案:
Design
Column Properties
Indentity Specification
下,设置(Is Identity)
=是和Indentity Increment
= 1 我在以下帖子Why is SQL server throwing this error: Cannot insert the value NULL into column 'id'?中看到了这个可能的解决方案,我尝试了所说的内容并解决了问题。