sql >> Base de Datos >  >> RDS >> Sqlserver

¿Puede LINQ-to-SQL omitir columnas no especificadas en la inserción para que se use un valor predeterminado de la base de datos?

Desafortunadamente, Linq to SQL no admite los valores predeterminados de la base de datos. Vea la primera pregunta aquí:

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

Lo que sugieren es que proporcione una implementación del método Insertar para la entidad en cuestión. La firma es

partial void Insert[EntityName](Entity instance)

Entonces, si tuviera una entidad llamada Persona, que quisiera tener un valor predeterminado de "Inicio" para un campo PhoneNumberDesc, podría implementarlo de esta manera:

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

Es posible que pueda salirse con la suya implementando el evento OnCreated, que se llama con cada constructor para cada entidad. Este artículo explica un poco cómo los puntos de extensibilidad en Linq To SQL:http://msdn.microsoft.com/en-us/library/bb882671.aspx

Con todo, la solución realmente apesta un poco. ¡Buena suerte!