2016-04-29 8 views
1

Mit den neuen AlwaysEncrypted Funktion eingefügt, ich verschlüsselte eine Datetime Spalt in einen meiner Tabellen und dies ist der Fehler, den ich immer bin, wenn ein neues Datum einzufügen versuchen:Fehlerdaten in AlwaysEncrypted Spalt

Message: [SqlException: Operand type clash: datetime2(7) encrypted with (encryption_type = 'RANDOMIZED', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'TestDb') is incompatible with datetime encrypted with (encryption_type = 'RANDOMIZED', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'TestDb') Statement(s) could not be prepared.] 

ich habe auch für Strings Einfügung Fehler wurde immer, aber nach dem Datentyp von varchar (24) (zum Beispiel) zu nvarchar (max) alles funktionierte reibungslos zu ändern. Irgendwelche Vorschläge?

Antwort

0

Es stellt sich heraus Entity Framework Problem. Also obwohl ich zunächst Modell zuerst verwendet, wurde die .NET DateTime in eine SQL-Datetime konvertiert, aber dann EF verwendet Sql datetime2 zum Binden.

Die verdrahtete Sache ist, dass ich nie einen Fehler vor dem Umwandeln der Spalte zu immer verschlüsselte erhielt. Warum dies noch nie vorgekommen ist, ist für mich immer noch ein Rätsel, aber der untenstehende Sql hat mein Problem gelöst. Ich empfehle, laufen diese hoch, bevor auf die Säule immer verschlüsselt Aufbringens, nur weitere Fehler zu vermeiden:

ALTER TABLE [TestTable] ALTER COLUMN Dob datetime2 
0

Für eine verschlüsselt (deterministisch) Spalte von SQL 2016, mit EF6 Migration - obwohl Das Modell verfügt über das Attribut, um seinen Datentyp als datetime anzugeben. EF verschiebt es weiterhin als datetime2 (7) und gibt den in diesem Thread berichteten Konfliktfehler aus. Selbst wenn Sie die Migrationsdatei manuell ändern, wird dieses Problem nicht gelöst.

Die einzige Lösung ist Datentyp verwenden datetime2 (7) anstelle von Datumzeit in SQL-Datenbank.

/// <summary> 
    /// *this wont work* 
    /// </summary> 
    [Column("addedDate", TypeName = "datetime")] 
    public DateTime? AddedDate { get; set; }