C# 使用接收2个参数的实体框架更新记录
我想更新数据库的特定行。代码如下:C# 使用接收2个参数的实体框架更新记录,c#,entity-framework,C#,Entity Framework,我想更新数据库的特定行。代码如下: 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
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();
}
}
public void Update\u Datos(int-ID)
{
int UserId=Convert.ToInt16((字符串)(会话[“UserId]”));
使用(var db=new Entities())
{
//阅读
List objDatos=db.Datos_personals.ToList();
foreach(对象中的个人数据项)
{
}
//更新
var datos_personals=db.datos_personals.FirstOrDefault(d=>d.UserId==UserId&&d.Id==Id);
Datos_personals Datos=objDatos[Datos_personals.Id];
datos=db.datos_personals.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.identification=txt_identification.Text;
datos.Estado_civil=ddEstadoCivil.SelectedValue;
datos.Telefono=txt_num_Telefono.Text;
datos.departmento=dddepartmento.SelectedValue;
datos.Nacionalidad=Country.SelectedValue;
datos.Salario_min_aceptado=ddSalario_min_aceptado.SelectedValue;
datos.Titulo=txt_Titulo.Text;
datos.Description_Professional=txt_Description_Professional.Text;
datos.UserId=Convert.ToInt16(UserId);
db.Datos_Personales.Add(Datos);
db.SaveChanges();
}
}
另一个问题是,它会创建另一行,而不是更新我需要的行。您不能读取所有数据库。当您使用这一行时,
List objDatos=db.Datos_personals.ToList()代码>,存储在内存中的所有实体(数据库中的所有行)
您可以直接获取数据并对其进行编辑。最后,您不能再次添加实体,只能调用SaveChages
。(如果您没有关闭ChangeTracker
)
删除db.Datos_personals.Add(Datos)行;DATOS变量是由EF跟踪的,您只需要保存。进一步到史提夫所说的,考虑一下您从哪里得到了<代码> DATOS<代码>:<代码> DATOS= DB。DATOSUMLATIAL。在哪里(D= > D.USERID=USERID和DID==ID)。代码>。您首先从db.Datos_personals获得它,那么为什么您需要将它添加到同一个集合中呢<代码>添加
用于添加新实体,这就是创建新记录的原因。
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();
}
}