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, List
1 생성된 값)이 표시됩니다.데이터. 매핑.업데이트. 내부.번역기 업데이트. 파일(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
'source' 카테고리의 다른 글
경고: 'contexters'는 더 이상 사용되지 않습니다.문자열 또는 하위 문자열을 직접 사용하십시오. (0) | 2023.06.28 |
---|---|
R data.frame에서 행을 가져오는 방법 (0) | 2023.06.28 |
R에서 플롯의 글꼴 크기를 늘리는 방법은 무엇입니까? (0) | 2023.06.28 |
Python에서 연도/월/일을 연도의 요일로 변환 (0) | 2023.06.28 |
MongoDB : 인덱스 순서와 쿼리 순서가 일치해야 합니까? (0) | 2023.06.28 |