Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O LINQ-to-SQL pode omitir colunas não especificadas na inserção para que um valor padrão de banco de dados seja usado?


Infelizmente, Linq to SQL não suporta valores padrão de banco de dados. Veja a primeira pergunta aqui:

http:// social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/3ae5e457-099e-4d13-9a8b-df3ed4ba0bab/

O que eles estão sugerindo é que você forneça uma implementação do método Insert para a entidade em questão. A assinatura sendo
partial void Insert[EntityName](Entity instance)

Portanto, se você tivesse uma entidade chamada Person, que desejasse ter um valor padrão de "Home" para um campo PhoneNumberDesc, você poderia implementá-lo desta maneira:
    partial void InsertPerson(Person instance)
    {
        if (string.IsNullOrEmpty(instance.PhoneNumberDesc))
            instance.PhoneNumberDesc = "Home";

        var insertParams = new List<object>();
        var insertStatement = "insert into ...";

        // build the rest of the insert statement and fill in the parameter values here...

        this.ExecuteQuery(typeof(Person), insertStatement, insertParams.ToArray());
    }

Você pode conseguir implementar o evento OnCreated, que é chamado com cada construtor para cada entidade. Este artigo explica um pouco sobre como os pontos de extensibilidade no Linq To SQL:http://msdn.microsoft.com/en-us/library/bb882671.aspx

Enfim, a solução é meio chata. Boa sorte!