我有一个SQL-Azure数据库创建与实体框架6.1,代码优先。
我的'EmazeEvents'表中的"datetime"字段是这样创建的:
datetime = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()")
,在代码中这样定义:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[Index]
public DateTime datetime { get; set; }
我理解这意味着如果在插入中省略了该字段,它将在默认情况下获得插入日期,它确实是这样做的。
但是,我在插入设置此字段的行时遇到麻烦。尽管我设置了适当变量的值,但它仍然将默认日期写入数据库。
部分代码摘录:EmazeEvents的定义如下:
public class EmazeEvents:DbContext
{
public EmazeEvents()
: base("EmazeEvent")
{ }
public DbSet<EmazeEvent> events { get; set; }
}
}
我所做的是:
context = new EmazeEvents();
EmazeEvent e = new EmazeEvent();
// e.datetime does get the correct date
e.datetime = DateTime.ParseExact("2014-05-31T00:00:06.8900000", "O", CultureInfo.InvariantCulture);
context.events.Add(e);
context.SaveChanges();
写入数据库的记录具有当前日期时间,忽略e.datetime中的日期时间。
我发现问题出在'datetime'字段的定义上。当我删除:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
它开始允许我写其他值而不是默认值