【问题标题】:Date field creation in Entity Framework Code FirstEntity Framework Code First 中的日期字段创建
【发布时间】:2015-04-12 06:49:38
【问题描述】:

我正在使用 Entity Framework Code First 方法来创建我的数据库表。以下代码在数据库中创建了一个 DATETIME 列,但我想创建一个 DATE 列。

//[Column(TypeName = "Date")]
        public DateTime endDate { get; set; }


        public DateTime startDate { get; set; }

列属性不起作用。如何在创建表期间创建 DATE 类型的列?

谢谢!

【问题讨论】:

  • 取消注释属性 [Column(TypeName = "Date")]
  • 我评论了它,因为它不起作用。
  • 然后仍然取消注释,这样人们就可以清楚地知道你包含它但它不起作用

标签: entity-framework ef-code-first


【解决方案1】:

您可以在 OnModelCreating 方法中将实体映射到 DbContext 中的表。我个人更喜欢为每个实体创建一个映射类并在此方法中引用它。示例:

编辑 - 更新代码。这是功能齐全的代码。

public sealed class MyDb : DbContext
{
    static MyDb()
    {
        System.Data.Entity.Database.SetInitializer<MyDb>(new DropCreateDatabaseAlways<MyDb>());
    }
    public MyDb(string nameOrConnectionString) : base(nameOrConnectionString)
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new MyMapper());
        base.OnModelCreating(modelBuilder);
    }
    public DbSet<TesTme> Items { get; set; }
}

public sealed class MyMapper : EntityTypeConfiguration<TesTme>
{
    public MyMapper()
    {
        // other mapping info
        this.ToTable("TestTable");
        HasKey(x => x.MyId);
        this.Property(x => x.MyId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(x => x.dt).HasColumnType("date");
    }
}
public sealed class TesTme
{
    public int MyId { get; set; }
    public DateTime dt { get; set; }

}

public sealed class SomeCallerOfTheDbContext
{
    public void TestMe()
    {
        // this is the entry point
        using (var context = new MyDb("connectionStringName"))
        {
            var items = context.Items.ToList();
        }

    }
}

【讨论】:

  • @smriti - 它确实有效,我在发布之前测试了代码,但我会更新它,所以它是一个完整的自包含示例。
  • @smriti 再试一次。原始代码旨在向您展示要做什么,而不是按原样运行。这是一个更新的示例,只要您在位于 app.config 或 web.config 中的连接字符串中提供正确的凭据或传入硬编码的连接字符串,它就可以自行运行。
  • DateTime TseTme.dt 无法将 datetime 隐式转换为 System.Timespan?
  • @smriti - 这个错误听起来像是你在调用代码中做错了什么。上面的示例回答了您最初的问题/问题。您的调用代码可能正在尝试将日期时间转换为时间跨度。我无法对此发表评论,因为您需要发布该代码,以便我们知道错误发生在哪里。
  • @smriti - 如果您觉得我的回答有帮助,请将其标记为“回答”,或者如果您还有其他问题,请发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多