我有一个基类,它具有审计属性,如
public abstract class BaseModel
{
[Column(Order = 1)]
public long Id { get; set; }
public long CreatedBy { get; set; }
public DateTime CreatedDate { get; set; }
public long ModifiedBy { get; set; }
public DateTime ModifiedDate { get; set; }
public bool IsActive { get; set; }
}
我所有的poco课程都来自这门课程。
我正在尝试为IsActive属性设置默认值。我并不热衷于使用注释,因此如果我可以使用流畅的API工作,那就是徘徊。
我尝试了这个,但它不起作用。好像它会创建一个名为BaseModel的新表
modelBuilder.Entity<BaseModel>()
.Property(p => p.IsActive)
.HasColumnAnnotation("DefaultValue", true);
任何人都可以在这里提出建议吗?
答案 0 :(得分:4)
没有办法做到这一点。它无法使用Entity Framework设置默认值。相反,您可以使用构造函数
public abstract class BaseModel
{
protected BaseModel()
{
IsActive = true;
}
}
答案 1 :(得分:1)
我已通过覆盖 SaveChanges 方法解决了此问题。请参阅下面的解决方案。
解决方案说明
i)覆盖DbContext类中的SaveChanges方法。
public override int SaveChanges()
{
return base.SaveChanges();
}
ii)编写逻辑以设置默认值
public override int SaveChanges()
{
//set default value for your property
foreach (var entry in ChangeTracker.Entries().Where(entry => entry.Entity.GetType().GetProperty("YOUR_PROPERTY") != null))
{
if (entry.State == EntityState.Added)
{
if (entry.Property("YOUR_PROPERTY").CurrentValue == null)
entry.Property("YOUR_PROPERTY").CurrentValue = YOUR_DEFAULT_VALUE;
}
}
return base.SaveChanges();
}
示例
i)创建基类
public abstract class BaseModel
{
[Column(Order = 1)]
public long Id { get; set; }
public long CreatedBy { get; set; }
public DateTime CreatedDate { get; set; }
public long ModifiedBy { get; set; }
public DateTime ModifiedDate { get; set; }
public bool IsActive { get; set; }
}
ii)覆盖 SaveChanges
public override int SaveChanges()
{
//set default value for IsActive property
foreach (var entry in ChangeTracker.Entries().Where(entry => entry.Entity.GetType().GetProperty("IsActive") != null))
{
if (entry.State == EntityState.Added)
{
if(entry.Property("IsActive").CurrentValue == null)
entry.Property("IsActive").CurrentValue = false;
}
}
return base.SaveChanges();
}