C# 无法使DateTime。分析工作正常

C# 无法使DateTime。分析工作正常,c#,sql,entity-framework,asp.net-mvc-4,datetime,C#,Sql,Entity Framework,Asp.net Mvc 4,Datetime,我正在学习如何使用MVC4和实体框架,并遵循Contoso大学教程。在第4章中,我被要求为我的数据库生成一个种子,但是当我尝试更新它时,PMC告诉我有一个错误 这是其中一个实体: using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace

我正在学习如何使用MVC4和实体框架,并遵循Contoso大学教程。在第4章中,我被要求为我的数据库生成一个种子,但是当我尝试更新它时,PMC告诉我有一个错误

这是其中一个实体:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;    

namespace ContosoUniversityMVC4.Models
{
    public class Student
    {
        public int StudentID { get; set; }

        [StringLength(30, MinimumLength = 3)]
        public string LastName { get; set; }

        [StringLength(30, MinimumLength = 3,  ErrorMessage ="Some error message")]
        [Column("FirstName")]
        public string FirstMidName { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]    
        public DateTime EnrollmentDate { get; set; }

        public string FullName
        {
            get { return LastName + ", " + FirstMidName; }
        }

        public virtual ICollection<Enrollment> Enrollments { get; set; }

    }
}
很明显,它无法将我试图传递的日期转换为有效的DB datetime格式。我已经检查了数据库,字段类型也是“datetime”(yyyy-MM-dd-hh:MM:ss.nnn,我在手工编辑时可以看到)。“第20行”指的是“var students=newlist”,这让我觉得我无法正确通过seed的“student”部分

我试图更改字符串的值(例如,yyyy-MM-dd hh:MM:ss),或者删除de“.Parse”属性并尝试直接传递日期,但到目前为止我无法解决问题

这段代码是按照教程的指导原则编写的,因为我不完全理解我在做什么(因为这对我来说是新的,我正在努力学习)


你能告诉我我做错了什么吗?如果您需要有关此问题的更多信息(VS/SQL版本、更多代码等),请让我知道。

此问题与EF迁移、EF或SQL无关,这是因为您尝试解析的日期的格式与您的应用程序运行的区域性不符。将使用当前系统区域性日期格式尝试解析日期字符串,如果不匹配,则抛出
格式异常

手动解析日期时,最好使用/来指定要解析的日期的确切格式,例如

EnrollmentDate = DateTime.ParseExact("2013-09-01", "yyyy-MM-dd", CultureInfo.InvariantCulture)

我不确定,但能否尝试删除[DataType(DataType.Date)]字段类型为数据库?这是什么意思?不,只需从Enrollmentdate中删除该行。我的猜测是,像您这样解析日期也包括了您不需要的时间(因为您键入的enrollmentdate是日期,而不是日期时间)@DanBracuk LOL,我的错误。DB中的字段是“datetime”。@S4NDERR,我试图更新de DB对该行的注释,但显示了相同的错误。非常感谢James。我第一次尝试你的建议,使用“null”作为第三个参数,但运气不好;现在,我尝试了CultureInfo变体,并得到以下错误:“一个或多个实体的验证失败。有关详细信息,请参阅'EntityValidationErrors'属性。”。我正在调查这件事,想知道哪个是错误。非常感谢您的输入。@Rambo3.com传递
null
实际上与以前的问题相同(因为它默认为当前区域性,这是我的错)。但是,
EntityValidationErrors
将是一个完全独立的问题。
PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying code-based migrations: [201402051617351_Chap4C].
Applying code-based migration: 201402051617351_Chap4C.
Running Seed method.
System.FormatException: String was not recognized as a valid DateTime.
   at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   at System.DateTime.Parse(String s)
   at ContosoUniversityMVC4.Migrations.Configuration.Seed(SchoolContext context) in c:\Users\f9243821\Documents\Visual Studio 2012\Projects\ContosoUniversityMVC4\ContosoUniversityMVC4\Migrations\Configuration.cs:line 20
   at System.Data.Entity.Migrations.DbMigrationsConfiguration`1.OnSeed(DbContext context)
   at System.Data.Entity.Migrations.DbMigrator.SeedDatabase()
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.SeedDatabase()
   at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
String was not recognized as a valid DateTime.
EnrollmentDate = DateTime.ParseExact("2013-09-01", "yyyy-MM-dd", CultureInfo.InvariantCulture)