Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

LINQ-to-SQL può omettere colonne non specificate all'inserimento in modo che venga utilizzato un valore predefinito del database?

Sfortunatamente, Linq to SQL non supporta i valori predefiniti del database. Vedi la prima domanda qui:

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

Quello che stanno suggerendo è di fornire un'implementazione del metodo Insert per l'entità in questione. La firma è

partial void Insert[EntityName](Entity instance)

Quindi, se avessi un'entità chiamata Person, che volevi avere un valore predefinito di "Home" per un campo PhoneNumberDesc, potresti implementarlo in questo modo:

    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());
    }

Potresti riuscire a farla franca implementando l'evento OnCreated, che viene chiamato con ogni costruttore per ogni entità. Questo articolo spiega un po' come punta l'estendibilità in Linq To SQL:http://msdn.microsoft.com/en-us/library/bb882671.aspx

Tutto sommato, la soluzione fa davvero schifo. Buona fortuna!