Entity Framework 6 Code First-Standard datetime-Wert auf einfügen
Wenn ich speichern der änderungen in der Datenbank, die ich in der folgenden Ausnahme:
Cannot insert the value NULL into column 'Registered', table
'EIT.Enterprise.KMS.dbo.LicenseEntry'; column does not allow nulls.
INSERT fails. The statement has been terminated.
Den zugehörigen code first-Modell-Eigenschaft sieht wie folgt aus:
[DatabaseGenerated(DatabaseGeneratedOption.Identity), DataMember]
public DateTime Registered { get; private set; }
... und hier ist, warum ich bin verwirrt: soweit ich weiß, indem Sie die annotation [DatabaseGenerated(DatabaseGeneratedOption.Identity)
bestelle ich Entity Framework zur automatischen Erzeugung des Feldes (in diesem Fall: Nur einmal zum Zeitpunkt der Erstellung.)
Also ich gehe davon aus, dass eine nicht-null-Werte zulässt (erforderlich) das Feld, ohne die Möglichkeit, ändern Sie das Feld manuell, wo EF kümmert.
Was mache ich falsch?
Hinweise:
- Ich will nicht von Fluent-API, die ich verwenden möchten POCOs.
- Die Eigenschaft
defaultValueSql
ist auch keine option, weil ich angewiesen Datenbank unabhängig für dieses Projekt (z.B. fürGETDATE()
). - Bin ich mit Entity Framework 6-alpha-3-Code First.
Ist die AutoGenerate auch Primärschlüssel? Wenn dem so ist, müssen Sie geben Sie den [key] - Anmerkung.
Nein. Es ist nur eine Eigenschaft.
Ich glaube nicht, dass die DateTime-Datentyp-Unterstützung für die identity-Feld-Attribut.
Nein. Es ist nur eine Eigenschaft.
Ich glaube nicht, dass die DateTime-Datentyp-Unterstützung für die identity-Feld-Attribut.
InformationsquelleAutor Atrotygma | 2013-06-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Das Fragezeichen macht die Eigenschaft null-Werte zulässt
InformationsquelleAutor Sparky
Diese Technik verhält sich wie ein
readonly
Feld, das speichern der Datenbank. Sobald der Wert eingestellt ist, kann es nicht (leicht) verändert werden, indem mithilfe von code. (Natürlich, ändern Sie die Einstellung zupublic
oderinternal
wenn nötig.)Beim erstellen einer neuen Instanz einer Klasse, verwendet dieser code
Registered
wird zunächst nicht eingestellt werden. Das erste mal der Wert vonRegistered
ist es beantragt, wird sehen, dass es noch nicht zugewiesen ist und dann standardmäßig aufDateTime.Now
. Sie können dies ändern, umDateTime.UTCNow
wenn nötig.Beim abrufen eine oder mehrere Entitäten aus der Datenbank, Entity Framework, setzen Sie den Wert
Registered
einschließlichprivate
setter wie diese.InformationsquelleAutor Jeremy Cook
Es ist kein Standard-DateTime. Nur ein min-Wert.
Könnten Sie möglicherweise nur die datetime auf, dass die Person vor dem Aufruf
dbContext.SaveChanges
.Sehen Sie dies für eine Lösung.
InformationsquelleAutor marcellscarlett