Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Kann LINQ-to-SQL nicht angegebene Spalten beim Einfügen auslassen, sodass ein Datenbank-Standardwert verwendet wird?

Leider unterstützt Linq to SQL keine Datenbankstandardwerte. Siehe die erste Frage hier:

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

Sie schlagen vor, dass Sie eine Implementierung der Insert-Methode für die betreffende Entität bereitstellen. Die Signatur ist

partial void Insert[EntityName](Entity instance)

Wenn Sie also eine Entität namens Person hätten, die Sie für ein PhoneNumberDesc-Feld als Standardwert „Home“ verwenden wollten, könnten Sie dies folgendermaßen implementieren:

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

Möglicherweise kommen Sie mit der Implementierung des OnCreated-Ereignisses davon, das mit jedem Konstruktor für jede Entität aufgerufen wird. Dieser Artikel erklärt ein wenig, wie die Erweiterbarkeitspunkte in Linq To SQL:http://msdn.microsoft.com/en-us/library/bb882671.aspx

Alles in allem ist die Lösung wirklich beschissen. Viel Glück!