C# Enity框架-更改默认值
我有一个SQL Server表,在很多列上都有默认值。例如,C# Enity框架-更改默认值,c#,sql-server,entity-framework,entity-framework-6,C#,Sql Server,Entity Framework,Entity Framework 6,我有一个SQL Server表,在很多列上都有默认值。例如,ModifiedDtm(行上次修改的时间),其默认值为GETDATE()。为了避免与此冲突,我在Entity Framework 6.2中使用代码优先的方法以以下方式实现了它: [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime ModifiedDtm { get; set; } 这使默认值在创建行时按预期工作。但是,它阻止我再次更新该列 如何使S
ModifiedDtm
(行上次修改的时间),其默认值为GETDATE()
。为了避免与此冲突,我在Entity Framework 6.2中使用代码优先的方法以以下方式实现了它:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime ModifiedDtm { get; set; }
这使默认值在创建行时按预期工作。但是,它阻止我再次更新该列
如何使SQL默认值可以使用,但仍然允许以后用EF更改值?
您应该考虑使用FLUENT API来实现这一点。在您的上下文类中,添加一点点用于设置默认值,如下所示,使用
class MyContext:DbContext
{
公共数据库集实体{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.Property(b=>b.Created)
.HasDefaultValueSql(“getdate()”);
}
}
注意:此解决方案需要EF Core对于
.Property()
方法,我看不到任何名为.HasDefaultValueSql()
的选项。我必须在某个地方包含一些东西吗?这并不能回答问题,因为HasDefaultValueSql
在EF Core中可用,而不是在EF 6中。@Noceo您可以检查复制的链接,并知道如何使用EF 6配置该链接。@CodeNotFound谢谢,我正在尝试找出如何使用该答案:-)可能的重复链接
class MyContext : DbContext
{
public DbSet<YourEntity> YourEntities{ get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<YourEntity>()
.Property(b => b.Created)
.HasDefaultValueSql("getdate()");
}
}