实体框架:从下拉列表ID中获取我的类中的对象

时间:2018-07-01 05:31:17

标签: entity-framework

我想从类Expediente创建一个对象:

public class Expediente
{
    //Para que sea key y no genere identity la BD 
    [Key]
    public int Codigo { get; set; }

    [Required]
    public Tramite Tramite { get; set; }

    //no le pongo requiered para que no de error al crearlo sin esto
    public DateTime FechaCreacion { get; set; }

    //por defecto hay que ponerlo en true
    public Boolean abierto { get; set; }

    [Required]
    public Funcionario Funcionario { get; set; }

    [Required]
    public Solicitante Solicitante { get; set; }

    public virtual ICollection<EtapaCumplida> etapasCumplidas { get; set; }

}

我可以从下拉列表中毫无问题地获得TramiteSolicitante,但是Funcionario里面有另一个对象(Grupo),但是我没有仅仅从Funcionario的密钥知道如何从数据库中获取它:

public class Funcionario
{
        //Indicar que se trata de una dirección de mail para que realice automáticamente la validación
        //Cambiar el nombre que se desplegará en el formulario
        [Key]
        [DisplayName("Email Funcionario")]
        [EmailAddress]
        public string Email { get; set; }

        //Varias validaciones
        [Required(ErrorMessage = "La contraseña no se puede dejar vacía")]
        [DataType(DataType.Password)]
        [MinLength(3, ErrorMessage = "Largo mínimo de la contraseña: 3"),
        MaxLength(12, ErrorMessage = "Largo máximo de la contraseña:12")]
        public string Contrasenia { get; set; }

        [Required(ErrorMessage = "El nombre no se puede dejar vacío")]
        //Cambiar el nombre que se desplegará en el formulario
        [DisplayName("Nombre Funcionario")]
        //Indicar largo maximo y minimo
        [StringLength(20, MinimumLength = 3)]
        public string Nombre { get; set; }

        [Required]
        public Grupo Grupo { get; set; }
}

有什么想法吗?

这是我填充下拉列表的代码

     public ExpedienteCrearViewModel (Expediente expediente , List<Tramite> listTramites, List<Funcionario> listFuncionario)
        {
            this.Expediente = expediente;

            //el primer campo es el valor que va a tomar, y el segundo lo que muestra
            this.Trsmites = new SelectList(listTramites, "Codigo", "Titulo");

            this.Funcionarios = new SelectList(listFuncionario, "Email", "Nombre");
        }

这是Expediente上create方法上的代码

 public ActionResult Create(ExpedienteCrearViewModel vm)
            {

                if (ModelState.IsValid)
                {
                    Expediente ex = new Expediente();

                    ex.Tramite = db.Tramite.Find(vm.idTramite);
                    ex.Solicitante = (Solicitante)Session["solicitante"];
                    ex.abierto = true;
                    ex.FechaCreacion = DateTime.Now;
                    db.Expediente.Add(ex);
                    db.SaveChanges();
                    vm.Trsmites = new SelectList(db.Tramite.ToList(), "Codigo", "Titulo");
                    vm.Funcionarios = new SelectList(db.Funcionario.ToList(), "Email", "Nombre");
                }

                return View(vm);
            }

0 个答案:

没有答案