source

VS 2010.net 4.0에서 엔티티 프레임워크를 사용할 때 'datetime2' 오류가 발생했습니다.

nicesource 2023. 6. 28. 21:48
반응형

VS 2010.net 4.0에서 엔티티 프레임워크를 사용할 때 'datetime2' 오류가 발생했습니다.

이 오류 가져오기:

시스템. 데이터.SqlClient.SqlException : datetime2 데이터 유형을 datetime 데이터 유형으로 변환하여 값이 범위를 벗어났습니다.

내 엔티티 개체는 모두 DB 개체에 맞춰 정렬됩니다.

Google을 통해 이 오류에 대한 단일 참조만 발견했습니다.

구글 결과

이 글을 읽고 필드 2개를 추가한 후 VS 2010에서 엔티티 모델을 업데이트한 것으로 기억합니다.저는 그가 차이점들을 "손으로 코딩"하는 것이 무엇을 의미하는지 잘 모르겠습니다.아무 것도 안 보여….

제가 하는 것뿐입니다. (에 새 .) 에 를 .DateTime.Now..

.ctx.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);

데이터베이스는 SQL Server 2008입니다.

생각은?

나머지 오류:

시스템에서.데이터. 매핑.업데이트. 내부.번역기 업데이트.IEentityStateManager stateManager, IEentityAdapter는 다음과 같습니다.Data.EntityClient.엔티티 어댑터.시스템에서 업데이트(IEntityStateManager 엔티티 캐시).데이터. 객체.개체 컨텍스트입니다.SafariAdmin은 저장 옵션입니다.Site.WebServices.파일 이름.sid, authSaveOrUpdate)SpeciesPost.svc.cs (SafariAdmin (SafariAdmin) 58 (SafariAdmin)을 참조.하네스를 테스트합니다.테스트. 사이트.웹서스비.게시 SVC_TesterSVC_Tester.Post 게새 종저 : at SVC_Tester.cs: 33ppm --SqlException at System.Data.SqlClient.SqlConnection.OnError(SqlException 예외, "breakConnection")는 오류입니다.Data.SqlClient.SqlInternalConnection은 다음과 같습니다.OnError(SqlException 예외, "breakConnection")는 오류입니다.Data.SqlClient.TdsParser.시스템에 예외 및 경고()를 던집니다.Data.SqlClient.TdsParser.파일 이름은 RunBehavior runBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject입니다.Data.SqlClient.SqlDataReader입니다.시스템에서 메타데이터()를 사용합니다.Data.SqlClient.SqlDataReader.get_MetaData() 파일입니다.Data.SqlClient.SqlCommand.파일: FinishExecuteReader(SqlDataReaders, RunBehavior runBehavior, String resetOptionsString) 파일:Data.SqlClient.SqlCommand.ExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) 파일입니다.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String ", DbAsyncResult ") 파일입니다.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String 를메) 파일입니다.Data.SqlClient.SqlCommand.시스템에서 ExecuteReader(명령 동작 동작, String 메서드).Data.SqlClient.SqlCommand.시스템에서 ExecuteDbDataReader(명령 동작)를 실행합니다.데이터. 공통.DB 명령.시스템에서 Reader 실행(명령 동작).데이터. 매핑.업데이트. 내부.동적 업데이트 명령입니다. 연결, 사전)(업데이트 번역기, 연결)2 identifierValues, List1 생성된 값)이 표시됩니다.데이터. 매핑.업데이트. 내부.번역기 업데이트. 파일(IEntityStateManagerstateManager, IEentAdapter)

엔티티 프레임워크는 모든 날짜를 Datetime2로 처리하므로, 데이터베이스의 필드가 Datetime이면 문제가 될 수 있습니다.여기서도 동일한 문제가 발생했습니다. 모든 날짜 필드를 채우고 데이터 유형을 변경하는 것이 가장 일반적인 해결책입니다.

인 " " " " " 을 .DateTime로서의 재산.DateTime?또는Nullable<DateTime>설정 해제DateTime개체가 문제를 일으킬 수 있습니다.

수 " " " " " " " "null"입니다.DateTime암호화되어 있는DateTime?인.NET에서 0001-01-01 날짜의 삽입 명령을 보냅니다(아니요).NULL이지만 최소 SQL DateTime 값이 1753-01-01이므로 오류가 발생합니다.만약 당신이DateTime 코의속입니null).DateTime?또는Nullable<DateTime>를 삽입하려고 합니다. , 를 삽입합니다.NULL범위를 벗어난 날짜 대신.

에서 "" "" "" "" "" "" "" ""로 합니다.datetime2사용자 편의를 위해 'aspnet'이 포함된 모든 테이블을 건너뜁니다.

DECLARE @SQL AS NVARCHAR(1024)
DECLARE @TBL AS NVARCHAR(255)
DECLARE @COL AS NVARCHAR(255)
DECLARE @NUL AS BIT

DECLARE CUR CURSOR FAST_FORWARD FOR
    SELECT  SCHEMA_NAME(t.schema_id)+'.'+t.name, c.name, c.is_nullable
    FROM    sys.tables AS t
    JOIN    sys.columns c ON t.object_id = c.object_id
    JOIN    information_schema.columns i ON i.TABLE_NAME = t.name 
                                        AND i.COLUMN_NAME = c.name
    WHERE   i.data_type = 'datetime' and t.name not like '%aspnet%'

    ORDER BY t.name, c.name

OPEN CUR
FETCH NEXT FROM CUR INTO @TBL, @COL, @NUL
WHILE @@FETCH_STATUS = 0
BEGIN
    SELECT @SQL = 'ALTER TABLE ' + @TBL 
        + ' ALTER COLUMN [' + @COL + '] datetime2' 
        + (CASE WHEN @NUL=1 THEN '' ELSE ' NOT' END) + ' NULL;'
    EXEC sp_executesql @SQL
    FETCH NEXT FROM CUR INTO @TBL, @COL, @NUL
END

CLOSE CUR;
DEALLOCATE CUR;

나에게는 그게 효과가 있어요!

나도 같은 문제를 가지고 있었고 그것을 푸트로 해결했습니다.[Column(TypeName = "datetime2")]샘플과 속성에 : 아래 샘 관 속 대 에 한 속 성 성 련 같 플 은 :

 [Column(TypeName = "datetime2")]
 public DateTime? PropertyName { get; set; }

다른 가능한 해결책은 필드의 sql 열 유형을 datetime2로 설정하는 것입니다.이것은 fluentapi를 사용하여 수행할 수 있습니다.

Property(x => x.TheDateTimeField)
   .HasColumnType("datetime2");

참고: datetime2는 sql server 2005 이하에서는 사용할 수 없으므로 sql server 2008 이상용 솔루션입니다.

인 것은 다른 할 수 사용자의 로) 를 오래질것알,지만된과 같은 더합니다. 여기서 검색해보니 다른 사람도 똑같이 할 수 있었습니다;-) DateTime에서 DateTime2로 변경하는 것이 옵션이 아닌 경우(SQL2005 사용자의 경우처럼) 대부분의 경우 비어 있는 필드에 다음과 같은 항목을 채우는 것이 더 합리적이라고 생각합니다.(DateTime)System.Data.SqlTypes.SqlDateTime.MinValue
DateTime.now에서는 그렇지 않습니다. "pseudo-null" 값으로 인식하는 것이 더 쉽기 때문입니다(그리고 필요한 경우 상위 개체의 부분 클래스에서 실제 null로 변환).

엔티티 프레임워크 코드를 먼저 사용할 때 다음과 같이 선언합니다.

public Nullable<System.DateTime> LastLogin { get; set; }

수정 여부데이터베이스 측에서만 업데이트되는 엔티티의 시간 속성입니다.그렇다면 DatabaseGeneratedOption을 사용해야 합니다.계산됨(EF CodeFirst용).또한 이 https://stackoverflow.com/a/9508312/1317263 을 방문하십시오.

감사해요.

우리도 같은 문제가 있었습니다.이는 mssql 버전과 관련이 있습니다.우리는 이 방법으로 우리의 모든 버전에서 작동하도록 만들었습니다.

xml 편집기를 사용하여 edmx 파일 열기 파일 맨 위에서 이 줄 찾기

<Schema Namespace="XXXXX.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008"

2005년까지 2008년을 대체합니다. 파일을 저장하고 프로젝트를 다시 컴파일하십시오.

그것이 미래에 다른 누군가에게 도움이 되기를 바랍니다.

저는 이 솔루션을 dbfirst 방식으로만 시도했습니다.

ASP.Net MVC 애플리케이션에서도 동일한 문제가 발생했습니다.

내 응용 프로그램에 DateTime 속성을 가진 두 개의 모델 클래스가 있었습니다.

조사한 결과 한 모델의 DateTime 속성이 무효라는 것을 알게 되었습니다. 즉, Birth 날짜를 선택적 속성으로 만드는 것입니다.

다른 모델에는 필수 데이터 주석이 있는 DateTime Property가 있습니다(이 모델을 저장할 때 오류가 발생함).

제 앱은 코드가 먼저라서 데이터 유형을 DateTime2로 설정하여 문제를 해결했습니다.

[Column(TypeName="datetime2")] 

그런 다음 패키지 관리자 콘솔에서 마이그레이션을 실행했습니다.

datetime2 데이터 유형에 맞는 날짜를 datetime2 데이터 유형에 넣을 수 있습니다. 반대로 datetime2 데이터 유형에 1500년 1월 날짜를 고정할 수 있지만 datetime2 열은 1753년으로 돌아갈 수 있습니다.전달하고 있는 최소 날짜와 테이블에 datetime2 또는 datetime 데이터 유형 열이 있는지 확인하겠습니다.

이 는 며칠동이문해노고후사다니습력용했한려결하안제를 사용했습니다.DateTime? 대신 Framework 로 데이터 합니다.DateTime.

삽입/업데이트 중 DB(datetime)의 null이 아닌 필드가 누락되지 않도록 합니다.같은 오류가 발생하여 날짜 필드에 값을 입력하면 문제가 해결되었습니다.null이 아닌 datetime 필드에 올바른 값이 할당되지 않은 경우 이 문제가 발생합니다.

간단합니다. 먼저 코드에서 DateTime의 유형을 DateTime으로 설정하십시오.따라서 데이터베이스에서 Null 가능한 DateTime 유형으로 작업할 수 있습니다.

이것은 Z 단계의 답변에서 나온 것입니다...사용할 때 이 오류가 발생했습니다.Entity Framework Code First와 함께AutoMapper.

를 할 때AutoMapping우리는 가지고 있다.createddt,updateddt,createdby그리고.updatedby동으로설필에 public override int SaveChanges()기능.이 작업을 수행할 때 다음 필드를 무시하도록 설정해야 합니다.AutoMapper가 그지않데베업가데다니됩으로 됩니다.null 되지않 경의우에서 View.

문제는 소스와 대상을 잘못된 방향으로 배치했기 때문에 설정할 때 필드를 무시하려고 한다는 것입니다.ViewModel ▁the를 설정할 때 Model.

Mapping이 오류를 : 내가이오참받때이보다니였습게렇을고았를류참(▁looked다니보▁(습였고:▁this▁like이내이게렇▁when때▁the▁inote::cfg.CreateMap<Source, Destination>()▁the를 매핑하는 것입니다.Model에▁ViewModel 및 정및설Ignore())

cfg.CreateMap<EventViewModel, Event>();
cfg.CreateMap<Event, EventViewModel>()
    .ForMember(dest => dest.CreatedBy, opt => opt.Ignore())
    .ForMember(dest => dest.CreatedDt, opt => opt.Ignore())
    .ForMember(dest => dest.UpdatedBy, opt => opt.Ignore())
    .ForMember(dest => dest.UpdatedDt, opt => opt.Ignore());

소스 및 대상은 매핑에 대해 무시해야 합니다.ViewModel.Model(참고: 아래 코드는 정확합니다.Ignore()는 의매 배니다됩치대의 에 대해 배치됩니다.ViewModel에▁Model)

cfg.CreateMap<Event, EventViewModel>();
cfg.CreateMap<EventViewModel, Event>()
    .ForMember(dest => dest.CreatedBy, opt => opt.Ignore())
    .ForMember(dest => dest.CreatedDt, opt => opt.Ignore())
    .ForMember(dest => dest.UpdatedBy, opt => opt.Ignore())
    .ForMember(dest => dest.UpdatedDt, opt => opt.Ignore());

두 가지 솔루션:

  • 클래스의 속성을 아래와 같이 선언하고 업데이트 데이터베이스를 만듭니다.

    public DateTime? MyDate {get; set;}
    
  • 또는 데이터베이스를 채우는 시드 메서드에서 속성의 날짜를 설정합니다. 데이터베이스를 업데이트할 필요가 없습니다.

    context.MyClass.AddOrUpdate(y => y.MyName,new MyClass { MyName = "Random", MyDate= DateTime.Now })
    

언급URL : https://stackoverflow.com/questions/3586566/datetime2-error-when-using-entity-framework-in-vs-2010-net-4-0

반응형