Я работаю над проектом ASP.NET MVC с NHibernate в качестве бэкэнд, и у меня возникли проблемы с получением некоторых дат для записи в мои таблицы базы данных SQL Server.NHibernate не будет сохраняться DateTime Переполнение SqlDateTime
Эти поля даты НЕВОЗМОЖНЫ, поэтому многие ответы здесь о том, как установить значения NULL, не помогли.
В основном, когда я пытаюсь сохранить сущность с полями DateAdded и LastUpdated, я получаю исключение переполнения SqlDateTime. У меня была аналогичная проблема в прошлом, когда я пытался написать поле datetime в столбец smalldatetime, обновив тип в столбце, чтобы устранить проблему. Я чувствую, что это будет проблема с определением таблицы или некоторым типом несовместимых типов данных, а исключение переполнения - это немного руля.
Я приложил пример определения таблицы и запроса, который NHibernate пытается запустить, будет с благодарностью принята любая помощь или предложения.
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'
В ответ на ответы/комментарии, я использую Fluent NHibernate и генерируемый отображение ниже
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>
Ваша таблица и SQL выглядят нормально. Выполняется ли этот SQL-запрос, если вы попытаетесь запустить его вручную? Возможно, стоит разместить здесь код и файл сопоставления спящего режима. –
Да, запрос выполняется нормально в SQL Query Analyzer, за исключением того, что мне нужно сменить двойные одинарные кавычки вокруг datetime (как строки стиля utc) на одинарные кавычки, этот запрос сгенерировано nhibernate –