O que poderia estar fazendo com que o db.submitchanges () não funcionasse no LINQ para SQL?

StackOverflow https://stackoverflow.com/questions/1579033

  •  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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top