2009-07-17 6 views
1

저는 Linq에 대해 아주 신기하고 제 데이터베이스를 업데이트하는 데 몇 가지 문제가있었습니다. 글로벌 데이터 컨텍스트를 사용하는 경우 실제로 발생하는지 또는 뭔가 빠졌는지 모르겠습니다. 내 입력 된 DataContex 한 정적 공공 바르가 다음과 같이, 그것은 네임 스페이스 내에있는 AlpaCommon을 초기화 할 수 있습니다SQL에 대한 링크 - 데이터베이스 업데이트 관련 문제

내 일부 데이터 컨텍스트 *******************

// partial datacontext class 
namespace 
AlpaCommon 
{ 
public partial class AlpaDataContext : System.Data.Linq.DataContext 
{ 

//Insert method is working... 
public void InsertAnimal2(Animal instance) 
{ 
Animais.InsertOnSubmit(instance); 
SubmitChanges(); 
} 

//Delete method is working... 
public void DeleteAnimal2(int animalID) 
{ 
var animal = (from a in Animais where a.AnimalID == animalID select a).First(); 
Animais.DeleteOnSubmit(animal); 
SubmitChanges(); 
} 



//Update method IS NOT working... 
public void UpdateAnimal2(Animal newAnimal) 
{. 
var animal = (from a in Animais where a.AnimalID == newAnimal.AnimalID select a).First(); 
animal = newAnimal; 
SubmitChanges(); 
} 

내가 ************* 전체 응용 프로그램에해야하는 데이터 컨텍스트 전자 기타 변수를 instanciating있어 곳입니다은

//global DataContext instance 
namespace AlpaCommon 
{ 
public static class Globals 
{ 
public static AlpaDataContext db = new AlpaDataContext(); 

이 호출이다 업데이트 방법 ***************************

using AlpaCommon; 
namespace Animais 
{ 
public partial class Altera : System.Web.UI.Page 
{ 

protected void btnUpdate_Click(object sender, EventArgs e) 
{ 
try 
{ 

//cria um novo Objeto do tipo Animal 
Animal animalAltera = new Animal(); 
//set new values 
animalAltera.AnimalID = Convert.ToInt32(Request.Params["AnimalID"]); 
animalAltera.Castrado = CastradoCheckBox.Checked; 
animalAltera.DisponivelAdocao = DisponivelCheckBox.Checked; 
animalAltera.Adotado = AdotadoCheckBox.Checked; 
animalAltera.Nome = NomeTextBox.Text; 
animalAltera.Tipo = TipoDropDownList.SelectedValue; 
animalAltera.Sexo = SexoDropDownList.SelectedValue; 
animalAltera.Descricao = DescricaoTextBox.Text; 
animalAltera.Local = LocalTextBox.Text; 
animalAltera.Foto = AlteraFoto(); 

AlpaCommon.Globals.db.UpdateAnimal2(animalAltera); 

redirect = redirectSucesso; 

} 
catch 
{ 
redirect = redirectErro; 
} 
finally 
{ 

Helper.Redirect(redirect); 
} 
} 

나는 데이터베이스를 업데이트하지 않습니다. 내 업데이트 또는 호출 메서드에서 뭔가가 누락 되었습니까? 나는 제안을 고대하고있다.

당신에게

Josimari Martarelli

+0

제목 변경 –

답변

1

문제는 당신의 동물 = newAnimal에 감사; 문을 UpdateAnimal2에 저장합니다. 그 맥락에서 동물은 단지 참조 일 뿐이며, 당신은 그 참조를 당신의 DataContext에 연결되지 않은 동물에게 할당하는 것임을 기억하십시오. animalAltera = new Animal();을 호출하는 대신에 먼저 dataContext에서 동물을 가져 오십시오. 그런 다음 SubmitChanges()를 호출하십시오. 또는 DataContext의 Attach() 메서드를 사용하여 새 Animal() 개체를 첨부 한 다음 제출할 수 있습니다.

0

UpdateAnimal2() 메서드에서 DataContext는 할당 전에 동물과 연결되어 있습니다. DataContext는 할당 후에 해당 동물과 연결되어 있지만 변수는 단순히 다른 객체를 가리 킵니다. DataContext는이 새로운 객체에 대해 아무 것도 모릅니다. 실제로 다른 객체가 객체를 다른 DataContext로 생성 한 경우 처리하는 데 문제가 있습니다. 대신 동물의 속성을 모두 newAnimal의 속성과 일치하도록 지정해야합니다. 과제는이 맥락에서 아무 것도 성취하지 못한다. 기존 객체에 새로운에서 각 속성을 복사

0

괜찮 았는데 :

공공 무효 UpdateAnimal2 (동물 animalAltera)

{

// 쿼리를 특정 동물에 대한.

VAR 동물 = (a에서 Animais에

a.AnimalID ==이

가 선택 animalAltera.AnimalID

)을 좁은 방();

animal.AnimalID = animalAltera.AnimalID;

animal.Castrado = animalAltera.Castrated;

animal.DisponivelAdocao = animalAltera.DisponivelAdocao;

animal.Adotado = animalAltera.Adotado;

animal.Nome = animalAltera.Nome;

animal.Tipo = animalAltera.Tipo;

animal.Sexo = animalAltera.Sexo;

animal.Descricao = animalAltera.Descricao;

animal.Local = animalAltera.Local;

animal.Foto = animalAltera.Foto;

SubmitChanges(); 나는 타임 스탬프 필드가없는 지금을 위해 필요한 생각하지 않기 때문에 작동하지 않습니다

부착

}. (필자는 홈페이지에 업데이트 한 사용자 관리를해야합니다) 있는 유일한 방법은 가야 가야 내가 내 테이블 구조의 변경이있는 경우 추가 작업이 필요합니다 기존의 객체에 대한 새로운에서 각 속성을 할당되어 귀찮게 ... 감사합니다! ! Linq에 링크에서

관련 문제