Entity framework 实体框架:无法将找到的对象指定给我的属性
我正在创建一个权宜之计,我可以毫无问题地获取所有数据,除了Functionario。 当我尝试将其指定为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); 我收到“无法转换隐式类型”错误。 你知道如何在不丢失数据的情
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”];请求书附件(请求书);例如,请求费用=请求费用