c# - 使用接收 2 个参数的实体框架更新记录
问题描述
我想更新数据库的特定行。这是代码:
public void Update_Datos(int ID)
{
int UserId = Convert.ToInt16((string)(Session["UserId"]));
using (var db = new Entities())
{
//Reading
List<Datos_Personales> objDatos = db.Datos_Personales.ToList<Datos_Personales>();
foreach (Datos_Personales item in objDatos)
{
}
//Update
var datos_personales = db.Datos_Personales.FirstOrDefault(d => d.UserId == UserId && d.Id == ID);
Datos_Personales datos = objDatos[datos_personales.Id];
datos = db.Datos_Personales.Where(d => d.UserId == UserId && d.Id == ID).First();
datos.Fecha_de_nacimiento = Convert.ToDateTime(Fecha_de_nacimiento.Text);
datos.Nombre_Completo = txt_Nombre_Completo.Text;
datos.Identificacion = txt_Identificacion.Text;
datos.Estado_civil = ddEstadoCivil.SelectedValue;
datos.Telefono = txt_num_telefono.Text;
datos.Departamento = ddDepartamento.SelectedValue;
datos.Nacionalidad = Country.SelectedValue;
datos.Salario_min_aceptado = ddSalario_min_aceptado.SelectedValue;
datos.Titulo = txt_Titulo.Text;
datos.Descripcion_Profesional = txt_Descripcion_Profesional.Text;
datos.UserId = Convert.ToInt16(UserId);
db.Datos_Personales.Add(datos);
db.SaveChanges();
}
}
另一个问题是它创建了另一行而不是更新我需要的行。
解决方案
您不能阅读所有 Db。当您使用这条线List<Datos_Personales> objDatos = db.Datos_Personales.ToList<Datos_Personales>();
时,您的所有实体(Db 中的所有行)都存储到内存中。
您可以直接获取数据并进行编辑。最后,您不能再次添加实体,只能调用SaveChages
. (如果你没有关闭ChangeTracker
)
public void Update_Datos(int ID)
{
int UserId = Convert.ToInt16((string)(Session["UserId"]));
using (var db = new Entities())
{
Datos_Personales datos = db.Datos_Personales.FirstOrDefault(d => d.UserId == UserId && d.Id == ID));
if(datos == null)
return;
datos.Fecha_de_nacimiento = Convert.ToDateTime(Fecha_de_nacimiento.Text);
datos.Nombre_Completo = txt_Nombre_Completo.Text;
datos.Identificacion = txt_Identificacion.Text;
datos.Estado_civil = ddEstadoCivil.SelectedValue;
datos.Telefono = txt_num_telefono.Text;
datos.Departamento = ddDepartamento.SelectedValue;
datos.Nacionalidad = Country.SelectedValue;
datos.Salario_min_aceptado = ddSalario_min_aceptado.SelectedValue;
datos.Titulo = txt_Titulo.Text;
datos.Descripcion_Profesional = txt_Descripcion_Profesional.Text;
datos.UserId = Convert.ToInt16(UserId);
db.SaveChanges();
}
}
推荐阅读
- angular - 如何在角度单元测试中识别哪些模块、依赖项添加到测试平台
- python - python将返回类型从set更改为list
- python - 检查字典是否是另一个具有键值对的字典的子集
- javascript - 选择输入文本提供的 dom 中出现的文本
- javascript - 使用 Javascript 在页面底部放置 CTA 按钮
- marklogic - Marklogic 安全设置未通过云初始化完成
- ruby-on-rails - 我无法启动 Rails 服务器
- javascript - Javascript 正则表达式用精确的少一个替换重复
- c# - 如何从数据库中删除对象?
- android - 将 Gradle 更新到版本 7.0.2