DateTime2가있는 Dapper를 사용하여 데이터를 삽입하면 SqlDateTime 오버플로 예외가 발생합니다.

.net ado.net c# dapper sql

문제

다음과 같은 객체가있는 경우 :

public class Person
{
  public int Id {get;set;}
  public string Name {get;set;}
  public DateTime DOB {get;set;}
}

내 객체에 이름을 설정하고 DOB가 DateTime.MinValue이고 Dapper를 다음과 같이 사용하면 :

INSERT INTO [Person] ([Person].[Name], [Person].[DOB]) VALUES (@Name, @DOB);
SELECT CAST(SCOPE_IDENTITY()  AS BIGINT) AS [Id]

connection.Query<long>(sql, entity);

이로 SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

그러나 문자열을 '0001-01-01 00:00:00'으로 SQL Management Studio에서 SQL을 실행하면 db에 잘 삽입됩니다.

이 아이디어를 어떻게 활용할 수 있습니까?

감사

최신 정보:

CREATE TABLE [dbo].[Person](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [DOB] [datetime2](7) NULL,
    [Name] [nvarchar](20) NOT NULL,
 CONSTRAINT [PK_Referrer_Referee] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

수락 된 답변

.Net DateTime은 둘 다 처리해야합니다.

Dapper는 datetime을 DbType DateTime으로 매핑하고 DbType.DateTime2를 필요로하지 않습니다.

https://github.com/SamSaffron/dapper-dot-net/blob/master/Dapper%20NET40/SqlMapper.cs#L384

typeMap [typeof (DateTime)] = DbType.DateTime; typeMap [typeof (DateTime?)] = DbType.DateTime;

그러나 TypeMap을 직접 추가 할 수는 있지만 datetime2 유형 / 클래스를 만들어야합니다.


인기 답변

Dapper에서 DateTime2 유형 매핑에 대한 SO 응답을 살펴 봅니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.