Linq2Sql Não Atualizar A Alterações
-
23-12-2019 - |
Pergunta
Eu estou usando Linq2Sql para atualizar uma linha de dados, mas uma vez eu alterar os valores Eu pesquisei esse problema antes e encontrou os seguintes razões possíveis:
- Entidade não foi alterado de modo a não atualização ocorre
- Entidade está faltando uma chave primária, mas não haverá atualização
Nenhum desses é o caso na minha situação.
Eu tenho o meu PK na minha classe e a tabela.O GetChangeSet() do contexto de dados indica que há pelo menos 1 atualização.
Os únicos problemas que eu vejo é que a partir do contexto de dados de log é que não há instrução update é gerado.
Alguém tem uma idéia de que o problema poderia ser.
Aqui está um exemplo de código:
using(context db=new context())
{
db.Log=new System.IO.StreamWriter(sample){AutFlush=true};
MyObject obj=db.MyTable.SingleOrDefault(row=>Email==email);
if(obj!=null)
{
obj.FirstName=firstName;
obj.LastName=lastName;
System.Data.Linq.ChangeSet set=db.GetChangeSet();
db.SubmitChanges();
}
}
Solução 2
Eu encontrei o problema.Para quem estiver interessado.
Eu previoulsy adicionado validação lógica para meu DataContext Clas.Por exemplo se meu nome de Tabela "Produto" que eu adicionei a validação parcial do método "UpdateProduct".
No entanto, eu esquecido de dizer o LINQ to SQL para continuar com as alterações para o banco de dados.Assim, ele seria validar, em seguida, fazer nada porque eu não continuar o código.
Para quem precisa dele, para fazer isso corretamente, eu precisava chamar "ExecuteDynamicUpdate" quando a lógica passado.
Exemplo de solução atualizada:
partial void UpdateObj(Obj instance)
{
if(instance.Field==null)
{
thow new NotImplementedException();
}
//Added missing code continuation
this.ExecuteDynamicUpdate(instance);
}
O ScottGu Blog me ajudou muito...http://weblogs.asp.net/scottgu/linq-to-sql-part-4-updating-our-database
Outras dicas
Você pode tentar isso
if(obj!=null)
{
obj.FirstName=firstName;
obj.LastName=lastName;
db.MyTable.InsertOnSubmit(obj);
db.SubmitChanges();
System.Data.Linq.ChangeSet set = db.GetChangeSet();
}