1

데이터베이스 버전을 얻으려고 할 때 "문자열을 날짜 및/또는 시간으로 변환 할 때 변환이 실패했습니다"오류가 발생합니다. EF 마이그레이션으로. 새 마이 그 레이션 스크립트 항목에 대해 EF가 생성 한 날짜 문자열 ('2012-03-21T18 : 23 : 13.525Z')이 MS SQL Server (Microsoft SQL Server Express Edition Advanced Services (64- 비트)). 이거 버그 야? 해결 방법이 있습니까?EF 4.3.1 마이그레이션 - 문자열에서 날짜 및/또는 시간을 변환 할 때 변환하지 못했습니다.

CREATE TABLE [__MigrationHistory] (
    [MigrationId] [nvarchar](255) NOT NULL, 
    [CreatedOn] [datetime] NOT NULL, 
    [Model] [varbinary](max) NOT NULL, 
    [ProductVersion] [nvarchar](32) NOT NULL, 
    CONSTRAINT [PK___MigrationHistory] PRIMARY KEY ([MigrationId]) 
) 
BEGIN TRY 
    EXEC sp_MS_marksystemobject '__MigrationHistory' 
END TRY 
BEGIN CATCH 
END CATCH 
INSERT INTO [__MigrationHistory] ([MigrationId], [CreatedOn], [Model], [ProductVersion]) 
VALUES ('144184_init', '2012-03-21T18:23:13.525Z', 0x33, '4.3.1'); 

편집

걱정하지 마라. 이것은 EntityFramework와는 아무런 관련이 없습니다. 내 SQL Server 데이터베이스가 SQL Server 2000과 역 호환되도록 구성되어 있으면 해당 날짜 형식을 사용할 수 없습니다. EF가 다른 형식으로 날짜 문자열을 출력 할 수 없거나 SQL Server가 2000으로 역 호환되어 여전히 EF 날짜 문자열을 이해할 수 없으면 내 데이터베이스에서 EF 마이그레이션을 사용할 수 없습니다. . - (사람이 호환성 수준 SQL 서버와 데이터베이스와 EF를 사용하는 방법을 근무하고 있으면 알려 주시기 바랍니다 2000

+0

나는 옵션이 새로운 지원되는 버전으로 데이터베이스를 마이그레이션되도록 EF 공식적으로 모든 SQL Server 2000 및 호환성 수준을 지원하지 않습니다 생각합니다. –

+0

그래, 낮은 버전에서 호환성 모드를 유지하면 데이터베이스가 SQL Server 인스턴스의 새로운 기능을 사용하지 못하게됩니다. 다행히 IT 부서에 호환성 모드를 SQL Server 2008로 전환 할 것을 확신했습니다. 데이터베이스는 이미 SQL Server 2008로 마이그레이션되었습니다. – enamrik

답변

2

그냥 그래서이 질문은 대답은 대답 한 다음 SQL

스위치 SQL Server 2000에서 최소 SQL Server 2005 로의 서버 데이터베이스 호환성 모드 및 날짜 문자열 구문 분석 문제가 사라집니다.

+0

광산이 SQL Server 2008로 설정되었지만 여전히 문제가 발생했습니다. –

5

여전히 날짜를 전달하려면유효한 SQL DateTime이있는 선택적 매개 변수.

public partial class AddTransactionDate : DbMigration 
{ 
    public override void Up() 
    { 
     // defaultValueSql is where the magic happens. 
     AddColumn("dbo.StorageTransaction", "Created", c => c.DateTime(nullable: false, defaultValueSql: DateTimeToSql(DateTime.UtcNow))); 
    } 

    public override void Down() 
    { 
     DropColumn("dbo.StorageTransaction", "Created"); 
    } 

    private static string DateTimeToSql(DateTime dt) 
    { 
     // Use the .Net SqlDateTime class to create a valid 
     // SQL server DATETIME. We also need to wrap it in quotes 
     // because EF prints out your values verbatim (e.g. you could 
     // also use GETUTCDATE() etc.). 
     return string.Format("N'{0}'", 
      new System.Data.SqlTypes.SqlDateTime(dt).ToSqlString()); 
    } 
} 

그리고 짜잔 : 예를 들어

ALTER TABLE [dbo].[StorageTransaction] ADD [Created] [datetime] NOT NULL DEFAULT N'2012-11-26 03:06:09 PM' 
INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion]) 
VALUES ('201211261300214_AddTransactionDate', 'Symblr.Migrations.Configuration', 
+1

사이드 노트 : 호환성 트릭이 나에게 효과가 없었습니다. –

+0

이것은 나를 위해 완벽하게 작동했습니다. (논리 오류를 수정 한 후 :'DateTimeToSql()'에 사용되지 않은 매개 변수'dt ') –

+0

테스트 콘솔 앱에서 샘플을 함께자를 때 발생합니다. 감사합니다 @ AlbertBori –

관련 문제