Entity Framework: не могу назначить найденный объект моему имуществу - PullRequest
0 голосов
/ 01 июля 2018

Im Создаю Expediente, и я могу получить все данные без проблем, кроме Funcionario. Когда я пытаюсь присвоить его как

ex.Funcionario = funcionario as Funcionario;

дает мне ноль но если я попытаюсь просто присвоить его как

ex.Funcionario= db.Funcionario.Where(F => F.Email == vm.idFuncionario).Include(F => F.Grupo);

Я получаю "не могу преобразовать неявный тип". ошибка. Любая идея о том, как я могу назначить этот Funcionario для свойства в Expediente без потери его данных?

public ActionResult Create(ExpedienteCrearViewModel vm)
        {

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

                var funcionario = db.Funcionario.Where(F => F.Email == vm.idFuncionario).Include(F => F.Grupo);
                ex.Funcionario = funcionario as Funcionario;

                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);
        }

вот класс 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; }

    }

1 Ответ

0 голосов
/ 01 июля 2018

Следующая переменная funcionario определена как показано ниже:

var funcionario = db.Funcionario.Where(F => F.Email == vm.idFuncionario).Include(F => F.Grupo);

возвращает IQueryable<Funcionario>, который не может быть преобразован прямо или косвенно, как вы делаете в строке ниже:

ex.Funcionario = funcionario as Funcionario;

Сначала вы должны выполнить запрос, чтобы он возвратил один экземпляр Funcionario, поэтому просто используйте это:

var funcionario = db.Funcionario
                    .Where(F => F.Email == vm.idFuncionario).Include(F => F.Grupo)
                    .SingleOrDefault();
ex.Funcionario = funcionario;

SingleOrDefault() выполняет запрос и возвращает один экземпляр Funcionario. Мой код делает вид, что «functionario» уникален для каждого электронного письма. Если вы считаете, что для того же электронного письма должно быть больше «functionario», просто замените SingleOrDefault() на FirstOrDefault().

Примечание: вы можете передать условие непосредственно в метод SingleOrDefault(), как показано ниже:

var funcionario = db.Funcionario
                    .Include(F => F.Grupo)
                    .SingleOrDefault(F => F.Email == vm.idFuncionario);
ex.Funcionario = funcionario;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...