みなさん、こんにちは。(もう一度)助けが必要です。MVC4プロジェクトで遊んでいます。コードファーストを使用してモデルを作成しました。プロジェクトをビルドしてもエラーは発生しませんが、新しいレコードを追加しようとすると、Proyectosテーブル一部のプロパティが必要ですが、このプロパティは別のエンティティからのものであるというエラーが表示されます。
エラーを生成するプロパティは、UsuarioエンティティのUserName、Password、Nombre、およびStatusエンティティのDescripcionです。
よろしくお願いします。
更新1:UsuarioおよびStatusのプロパティの[Required]行にコメントすると、このエラーが発生します{"値NULLを列'Descripcion'、テーブル'NTSControl.dbo.tbStatus'に挿入できません;列はnullを許可しません。 INSERTは失敗します。\r\nステートメントは終了しました。"}
しかし、なぜそのテーブルに値を挿入しようとしているのでしょうか。
これがコードです
//Model Proyecto
public class Proyecto
{
[Required (ErrorMessage="Número de Proyecto Es Requerido")]
[Key]
[Display(Name = "Num. Proyecto")]
public virtual String ProyectoID { get; set; }
[Required (ErrorMessage="ID de Usuario Requerido ")]
[Display(Name = "ID Usuario")]
public virtual int UserID { get; set; }
[Required (ErrorMessage="Order de Compra Es Requerido")]
[Display(Name = "O.C. Cliente")]
public virtual String OCCliente { get; set; }
[Required (ErrorMessage="El Monto Del Proyecto Es Requerido")]
[Display(Name = "Monto")]
public virtual decimal Monto { get; set; }
[Required (ErrorMessage="Numero de Cotizacion Es Requerido")]
[Display(Name = "Cotizacion NTS")]
public virtual String CotizacionNTS { get; set; }
[Required(ErrorMessage="Fecha De Inicio Es Requerido")]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
[Display(Name = "Fecha De Inicio")]
public virtual DateTime FechaInicio { get; set; }
[Display(Name = "Fecha de Fin")]
public virtual DateTime? FechaFin { get; set; }
[Display(Name = "Tipo de Moneda")]
public virtual String TipoMoneda { get; set; }
[Display(Name = "Descripcion")]
public virtual String Descripcion { get; set; }
[Display(Name = "Monto M.N.")]
public virtual Nullable<decimal> MontoMN { get; set; }
[Display(Name = "Tipo de Cambio")]
public virtual Nullable<decimal> CambioMoneda { get; set; }
[Required]
[Display(Name = "Status")]
public virtual int StatusID { get; set; }
public virtual Status Statuses { get; set; }
public virtual Usuario Usuarios { get; set; }
public virtual ICollection<Comentario> Comentarios { get; set; }
public virtual ICollection<Abono> Abonos { get; set; }
public virtual ICollection<Cargo> Cargos { get; set; }
}
//DBContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<NTSControlDB>(null);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
#region Mapping Proyectos
//Mapping Atributes with Field Proyectos
modelBuilder.Entity<Proyecto>()
.Map(m =>
{
m.ToTable("tbProyecto");
})
.HasRequired(s => s.Statuses)
.WithMany()
.HasForeignKey(s => s.StatusID)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Proyecto>()
.HasRequired(u => u.Usuarios)
.WithMany()
.HasForeignKey(u => u.UserID)
.WillCascadeOnDelete(false);
}
//Create Proyecto Controller
[HttpPost]
public ActionResult Create(Proyecto proyecto)
{
proyecto.UserID = proyecto.Usuarios.UserID;
proyecto.StatusID = proyecto.Statuses.StatusID;
try
{
db.Proyectos.Add(proyecto);
db.SaveChanges();
return RedirectToAction("Index");
}
catch (DbEntityValidationException ex)
{
foreach (var validationErrors in ex.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
}
}
}
return View();
}
public class Usuario
{
[Required]
[Key]
[Display(Name = "Id")]
public virtual int UserID { get; set; }
[Required]
[MaxLength(3)]
[Display(Name = "Usuario")]
public virtual String UserName { get; set; }
[Required]
[Display(Name = "Password")]
public virtual String Password{ get; set; }
[Required]
[Display(Name = "Nombre")]
public virtual String Nombre { get; set; }
[Display(Name = "Email")]
public virtual String Email { get; set; }
[Required]
[Display(Name = "Nivel")]
public virtual int Nivel { get; set; }
}
public class Status
{
[Required]
[Key]
[Display(Name = "Id")]
public virtual int StatusID { get; set; }
[Required]
[Display(Name = "Descripcion")]
public virtual string Descripcion { get; set; }
}