Linq inserir no campo de chave primária que é autosync

votos
4

Eu mais ou menos quero fazer o que esta questão sugere. Como faço para configurar manualmente um campo de identidade em LINQ to SQL (Identity INSERT IGNORE)

No entanto, eu quero explicar. Eu tenho um db cliente. Eu carregar objetos Linq a partir daqui ea enviá-los através WCF. Por outro lado, eu anexá-las a um contexto de dados e publicá-las para a mesa. A questão é, eles terão o seu conjunto de colunas Guid. Esta coluna é marcado como AutoSync no DBML. Assim, no caso de uma inserção, Linq me obriga a usar o novo valor. Eu gostaria que ele para manter o meu valor quando eu precisar dele para.

update 1

Basicamente eu quero virar o AutoSync e IsDbGenerated definição em tempo real através de programação.

[Column(Storage=_cName, 
        AutoSync=AutoSync.OnInsert, 
        DbType=UniqueIdentifier NOT NULL, 
        IsPrimaryKey=true, IsDbGenerated=true)]
Publicado 19/05/2009 em 21:39
fonte usuário
Em outras línguas...                            


3 respostas

votos
1

Deixe-me reformular a pergunta: você quer usar as mesmas definições de objetos em ambos os lados, mas de um lado você quer que o identificador a ser gerada, enquanto por outro lado você quer que ele seja inserido? A única maneira que eu conheço para fazer isso é usar metadados baseada em XML em vez de baseada em atributos. Infelizmente, tanto quanto eu sei o designer DBML visual não suporta metadados XML. No entanto, você pode usar a ferramenta SqlMetal para gerar o XML, em seguida, modificar o arquivo para uso no outro lado do serviço web.

Você pode começar a usar SqlMetal aqui: http://msdn.microsoft.com/en-us/library/bb386987.aspx

Respondeu 21/05/2009 em 19:23
fonte usuário

votos
0

É definitivamente a propriedade IsDbGenerated que você precisa para olhar, e não AutoSync.

Eu vejo que você descreveu um cenário onde você deseja definir o ID da aplicação. Existe realmente um outro cenário em que você precisa que ele seja pelo banco de dados gerado automaticamente? Se não, você pode apenas definir IsDbGenerated = false, e preencher com Guid.NewGuid () em seu serviço WCF se / quando você não tiver um ID do cliente.

Uma das vantagens de usar um rowguid em vez de uma coluna de identidade é que você tem permissão para inserir valores específicos para a coluna ROWGUID, mas você não tem que. Você pode manter a coluna como uma rowguid com PADRÃO NEWID (), mas definir IsDbGenerated = false no seu serviço, e ainda vai trabalhar, desde que você lembre-se de realmente preencher o ID.

Respondeu 21/05/2009 em 20:10
fonte usuário

votos
0

Não é possível alterar atributos na mosca sem o uso de reflexão. Você pode ser capaz de fazer isso de outra maneira por handcoding seu linq. Eu não aconselharia mudando os atributos na mosca, eles são atributos por projeto e pode haver conscquencies imprevistas para alterar isso.

Respondeu 21/05/2009 em 16:23
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more