C# 更新实体时出错
我这里有点麻烦 当我尝试更新实体时,会引发此异常: Store update、insert或delete语句影响了意外的行数(0)。自加载实体后,实体可能已被修改或删除。刷新ObjectStateManager条目 我到处找,但没有成功 模型:C# 更新实体时出错,c#,.net,entity-framework,entity-framework-6,C#,.net,Entity Framework,Entity Framework 6,我这里有点麻烦 当我尝试更新实体时,会引发此异常: Store update、insert或delete语句影响了意外的行数(0)。自加载实体后,实体可能已被修改或删除。刷新ObjectStateManager条目 我到处找,但没有成功 模型: public class Projeto { public int Id { get; set; } public int Codigo { get; set; } public string Descricao { get; s
public class Projeto
{
public int Id { get; set; }
public int Codigo { get; set; }
public string Descricao { get; set; }
public virtual Cliente Cliente { get; set; }
public DateTime DataInicio { get; set; }
public DateTime DataFim { get; set; }
public string NumeroContrato { get; set; }
public virtual ICollection<Funcionario> Funcionarios { get; set; }
}
public class Cliente
{
public int Id { get; set; }
public int Codigo { get; set; }
public string Nome { get; set; }
public virtual Endereco Endereco { get; set; }
public virtual Contato Contato { get; set; }
public string CNPJ { get; set; }
}
public class Funcionario
{
public int Id { get; set; }
public int Codigo { get; set; }
public string Nome { get; set; }
public DateTime DataAdmicao { get; set; }
public string NomePai { get; set; }
public string NomeMae { get; set; }
public virtual ICollection<Projeto> Projetos { get; set; }
}
“萨尔法”不等于这个,我做了一个总结。但事实就是这样 首先,确保您的
FirstOrDefault()
方法返回任何对象:
projeto.Cliente = _dao.Cliente.FirstOrDefault(x => x.Id == projeto.Cliente.Id);
您是否确定您的
projeto.Cliente.Id
已设置为适当的Id(或者根本没有设置任何Id
) 您应该首先将项目附加到上下文,然后进行更改:
// Attach:
_dao.Entry(projeto).State = System.Data.Entity.EntityState.Attached;
// Change:
projeto.Cliente = _dao.Cliente.FirstOrDefault(x => x.Id == projeto.Cliente.Id);
另外,请确保在修改前加载了projeto.Cliente
,否则更改跟踪器不会注意到更改
请注意,如果您想将其作为模型的一部分,还可以设置基本外键值ClienteId
。它将为您节省一些Cliente
对象。(寻找外键关联与独立关联)。是的,我确信这会返回一个有效的“客户”。它不起作用。我试过了。“项目”只是一个模型。并且也尝试过插入外键,不也会出现同样的错误。
// Attach:
_dao.Entry(projeto).State = System.Data.Entity.EntityState.Attached;
// Change:
projeto.Cliente = _dao.Cliente.FirstOrDefault(x => x.Id == projeto.Cliente.Id);