Sto lavorando a un progetto ASP.NET MVC con NHibernate come back-end e sto avendo qualche problema a recuperare alcune date per scrivere nuovamente alle tabelle del mio database SQL Server.NHibernate non persisterà DateTime SqlDateTime overflow
Questi campi di date NON sono annullabili, quindi le numerose risposte qui su come impostare i tempi di registrazione annulli non hanno aiutato.
Fondamentalmente quando provo a salvare l'entità che ha un campo DateAdded e LastUpdated, ricevo un'eccezione di overflow SqlDateTime. Ho avuto un problema simile in passato in cui stavo cercando di scrivere un campo datetime in una colonna smalldatetime, aggiornando il tipo sulla colonna apparso per risolvere il problema. Il mio istinto è che sarà un problema con la definizione della tabella o qualche tipo di tipi di dati incompatibili, e l'eccezione di overflow è un po 'un vagabondo.
Ho allegato un esempio della definizione della tabella e la query che NHibernate sta tentando di eseguire, qualsiasi aiuto o suggerimento sarebbe molto apprezzato.
CREATE TABLE [dbo].[CustomPages](
[ID] [uniqueidentifier] NOT NULL,
[StoreID] [uniqueidentifier] NOT NULL,
[DateAdded] [datetime] NOT NULL,
[AddedByID] [uniqueidentifier] NOT NULL,
[LastUpdated] [datetime] NOT NULL,
[LastUpdatedByID] [uniqueidentifier] NOT NULL,
[Title] [nvarchar](150) NOT NULL,
[Term] [nvarchar](150) NOT NULL,
[Content] [ntext] NULL
)
exec sp_executesql N'INSERT INTO CustomPages (Title, Term, Content, LastUpdated, DateAdded, StoreID, LastUpdatedById, AddedById, ID) VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8)',N'@p0
nvarchar(21),@p1 nvarchar(21),@p2 nvarchar(33),@p3 datetime,@p4 datetime,@p5 uniqueidentifier,@p6 uniqueidentifier,@p7 uniqueidentifier,@p8 uniqueidentifier',@p0=N'Size and Colour
Chart',@p1=N'size-and-colour-chart',@p2=N'This is the size and colour chart',@p3=''2009-03-14 14:29:37:000'',@p4=''2009-03-14
14:29:37:000'',@p5='48315F9F-0E00-4654-A2C0-62FB466E529D',@p6='1480221A-605A-4D72-B0E5-E1FE72C5D43C',@p7='1480221A-605A-4D72-B0E5-E1FE72C5D43C',@p8='1E421F9E-9A00-49CF-9180-DCD22FCE7F55'
In risposta alle le risposte/commenti, io sto usando Fluent NHibernate e la mappatura generato è inferiore
public CustomPageMap() {
WithTable("CustomPages");
Id(x => x.ID, "ID")
.WithUnsavedValue(Guid.Empty)
. GeneratedBy.Guid();
References(x => x.Store, "StoreID");
Map(x => x.DateAdded, "DateAdded");
References(x => x.AddedBy, "AddedById");
Map(x => x.LastUpdated, "LastUpdated");
References(x => x.LastUpdatedBy, "LastUpdatedById");
Map(x => x.Title, "Title");
Map(x => x.Term, "Term");
Map(x => x.Content, "Content");
}
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false" assembly="MyNamespace.Core" namespace="MyNamespace.Core">
<class name="CustomPage" table="CustomPages" xmlns="urn:nhibernate-mapping-2.2">
<id name="ID" column="ID" type="Guid" unsaved-value="00000000-0000-0000-0000-000000000000"><generator class="guid" /></id>
<property name="Title" column="Title" length="100" type="String"><column name="Title" /></property>
<property name="Term" column="Term" length="100" type="String"><column name="Term" /></property>
<property name="Content" column="Content" length="100" type="String"><column name="Content" /></property>
<property name="LastUpdated" column="LastUpdated" type="DateTime"><column name="LastUpdated" /></property>
<property name="DateAdded" column="DateAdded" type="DateTime"><column name="DateAdded" /></property>
<many-to-one name="Store" column="StoreID" /><many-to-one name="LastUpdatedBy" column="LastUpdatedById" />
<many-to-one name="AddedBy" column="AddedById" /></class></hibernate-mapping>
La tabella e SQL sembrano ok. Quella query SQL funziona se provi a eseguirlo manualmente? Potrebbe valere la pena di postare il codice e il file di mappatura di ibernazione qui –
Sì, la query viene eseguita correttamente in SQL Query Analyzer, tranne che devo cambiare le virgolette singole doppie attorno al datetimes (come stringhe di stile utc) alle virgolette singole, questa query è generato da nibernato –