Entity framework 实体框架:无法将找到的对象指定给我的属性

Entity framework 实体框架:无法将找到的对象指定给我的属性,entity-framework,Entity Framework,我正在创建一个权宜之计,我可以毫无问题地获取所有数据,除了Functionario。 当我尝试将其指定为 ex.Funcionario = funcionario as Funcionario; 给我一个空的 但如果我试着像这样分配它 ex.Funcionario= db.Funcionario.Where(F => F.Email == vm.idFuncionario).Include(F => F.Grupo); 我收到“无法转换隐式类型”错误。 你知道如何在不丢失数据的情

我正在创建一个权宜之计,我可以毫无问题地获取所有数据,除了Functionario。 当我尝试将其指定为

ex.Funcionario = funcionario as Funcionario;
给我一个空的 但如果我试着像这样分配它

ex.Funcionario= db.Funcionario.Where(F => F.Email == vm.idFuncionario).Include(F => F.Grupo);
我收到“无法转换隐式类型”错误。 你知道如何在不丢失数据的情况下,将该函数分配给权宜之计上的属性吗

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);
        }
这是权宜之计

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

    }
公共类权宜之计
{
//海钥匙没有通用标识
[关键]
public int Codigo{get;set;}
[必需]
公共电车{get;set;}
//没有人要求你不要犯错误
公共日期时间fechacreation{get;set;}
//这是真的吗
公共布尔型abierto{get;set;}
[必需]
公共Functionario Functionario{get;set;}
[必需]
公共请求请求{get;set;}
公共虚拟ICollection etapasCumplidas{get;set;}
}

以下变量定义如下:

var funcionario = db.Funcionario.Where(F => F.Email == vm.idFuncionario).Include(F => F.Grupo);
var funcionario = db.Funcionario
                    .Include(F => F.Grupo)
                    .SingleOrDefault(F => F.Email == vm.idFuncionario);
ex.Funcionario = funcionario;
返回一个
IQueryable
,它不能像在下一行中那样简单或明确地转换:

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”是唯一的。如果您认为同一封电子邮件必须有更多的“功能”,那么只需将
SingleOrDefault()
替换为
FirstOrDefault()

旁注:您可以直接将条件传递给
SingleOrDefault()
方法,如下所示:

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

functionario
属性的类型是什么?只需向我们展示“方便”类,我只需添加“方便”类代码。Funciario是Funciariotary类型的对象,在行尾添加.FirstOrDefault。Where语句返回Functionario的IQueryable,而实体中的属性是单个Functionario。我尝试过这个,它工作得很好。现在我可以得到Functionario。唯一的问题是,现在我得到了“违反主键约束'PK_dbo.requestante'。无法在对象'dbo.requestante'中插入重复的键。重复的键值是(15301123)。语句已终止。“db.SaveChanges()时出错”;行被执行。在CreateYou上,应替换此行
ex.requestante=(requestante)会话[“requestante”]使用这三行
var-requestante=(requestante)会话[“requestante”];请求书附件(请求书);例如,请求费用=请求费用