0

みなさん、こんにちは。(もう一度)助けが必要です。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; }
}
4

1 に答える 1

0

「Proyecto」クラスには「Usuario」オブジェクトが含まれています。

public virtual Usuario Usuarios { get; set; }

また、ユーザー名、パスワードなどは [必須] です。【必須】をコメントアウトすれば保存できますよね?

于 2013-02-13T00:11:53.507 に答える