O que poderia estar fazendo com que o db.submitchanges () não funcionasse no LINQ para SQL?
-
21-09-2019 - |
Pergunta
Eu configurei um exemplo muito simples com o LINQ para SQL no WPF.
Eu posso conseguir um objeto (PageItem) assim e eu posso mudar o propriedade E quando eu ligo Enviar alterações() me dá Sem erro mas isso não salva o troco.
MainDataContext db = new MainDataContext();
var pageItem = (from p in db.PageItems
where p.Id == 1
select p).SingleOrDefault();
pageItem.Title = "changed";
db.SubmitChanges();
O que poderia estar causando submitchanges a não enviar as alterações?
MAIS INFORMAÇÕES:
Isso também não funciona, mesmo o db.exectecommand não funciona e, estranhamente, quando a depuração do F11 não entra em submitchanges () ou executEcommand (), por que não posso intervir nelas?
using (var db = new MainDataContext())
{
var pageItem = (from p in db.PageItems
where p.Id == 1
select p).SingleOrDefault();
pageItem.Title = "changed";
db.SubmitChanges();
db.ExecuteCommand("INSERT INTO PageItems (Title) VALUES ('this is the title')");
if (pageItem != null)
MainContent.Children.Add(new QuickForm(pageItem));
}
mais informações:
O db.log = console.out me dá o seguinte:
SELECT [t0].[Id], [t0].[IdCode], [t0].[Title], [t0].[Description], [t0].[DisplayOrder]
FROM [dbo].[PageItems] AS [t0]
WHERE [t0].[Id] = @p0
'TestPageManager23434.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\PresentationFramework.resources\3.0.0.0_de_31bf3856ad364e35\PresentationFramework.resources.dll'
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
INSERT INTO PageItems (Title) VALUES ('this is the title')
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
The thread 0x1190 has exited with code 0 (0x0).
RESPONDA
A solução foi tríplice:
Eu estava mudando um banco de dados diferente do que estava olhando no Visual Studio, solução:
var db = new mainDATAContext (@"c: users testUser documents Visual Studio 2008 Projects testPagemanager23434 testPagemanager23434 data main.mdf")))
Isso fez do trabalho de atualização, mas não submitchanges (), a solução foi definir a chave primária.
Ainda não estava mostrando todas as chagnes, o problema era que eu tinha um número de "dados de dados" o Windows aberto, o que não estava sendo atualizado
Solução
Isso pode acontecer se você não tiver uma chave primária definida nas tabelas no servidor SQL
Outras dicas
Por algum motivo, o contexto pode não estar rastreando alterações. Tente conectar o seu db.Log
para um escritor e inspecione o que linq-> sql está fazendo quando você liga SubmitChanges()
..
db.Log = Console.Out;
Então você pode assistir à sua janela de saída em execução no Debug e ver o que está acontecendo.
Você está usando o arquivo mdf de expressão SQL?
Há uma artigo sobre como isso pode fazer com que você obtenha uma cópia do arquivo e não o original, causando os sintomas que você está descrevendo.
FTA:
Eu acho que o Sistema de Projeto ou o Servidor Explorer Wizard oferece para 'copiar' seu MDF no diretório do projeto. Talvez você esteja operando em uma cópia do banco de dados e visualizando o outro no Server Explorer.
Eu tive o mesmo problema em que o registro no Base de dados Vejo no meu projeto não foi modificado pelo SubmitChanges
método.
Depois de tantas tentativas e pesquisas, descobri que o sistema colocou outra versão do Base de dados Northwnd.mdf
no diretório raiz do projeto \Bin\Debug\Northwnd.mdf
. Foi aí que ocorreu as mudanças perfeitamente.