Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

LINQ-to-SQL peut-il omettre des colonnes non spécifiées lors de l'insertion afin qu'une valeur par défaut de la base de données soit utilisée ?

Malheureusement, Linq to SQL ne prend pas en charge les valeurs par défaut de la base de données. Voir la première question ici :

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

Ce qu'ils suggèrent, c'est que vous fournissiez une implémentation de la méthode Insert pour l'entité en question. La signature étant

partial void Insert[EntityName](Entity instance)

Donc, si vous aviez une entité appelée Person, que vous vouliez avoir une valeur par défaut de "Home" pour un champ PhoneNumberDesc, vous pourriez l'implémenter de cette façon :

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

Vous pourrez peut-être vous en tirer en implémentant l'événement OnCreated, qui est appelé avec chaque constructeur pour chaque entité. Cet article explique un peu comment les points d'extensibilité dans Linq To SQL :http ://msdn.microsoft.com/en-us/library/bb882671.aspx

Dans l'ensemble, la solution est vraiment un peu nulle. Bonne chance !