NHibernate를 백엔드로 사용하는 ASP.NET MVC 프로젝트에서 일부 SQL Server 데이터베이스 테이블에 다시 쓰는 데 문제가 있습니다.NHibernate가 지속되지 않음 DateTime SqlDateTime 오버 플로우
이 날짜 필드에는 nullable이 없으므로 nullable datetime을 설정하는 방법에 대한 많은 대답이 도움이되지 못했습니다.
기본적으로 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'
하여 답변/의견, 나는 유창함 자 NHibernate를 사용하고 왜 @ P3와 @의 P4가 2 배 작은 따옴표를해야합니까 생성 된 매핑은
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 쿼리가 작동합니까? 코드와 최대 절전 모드 매핑 파일을 게시하는 데 유용 할 수도 있습니다. –
예, datetimes (utc 스타일 문자열로) 주위에 이중 작은 따옴표를 작은 따옴표로 변경해야한다는 점을 제외하면 쿼리가 SQL 쿼리 분석기에서 올바르게 실행됩니다. Nhibernate에 의해 생성 된 –