我正在使用Code first Method开发MVC应用程序。我创建了一个名为IEntityBase的通用接口。我已经定义了将在所有表中使用的基本列。我想为某些列分配默认值,以便在创建新行时,默认情况下将分配这些值。我们可以在每个类构造函数中定义,但是我想将它们分配为通用,这样如果我将来添加任何新列,那么我可以这样做。
我可以使用IOC吗?
例如
public interface IEntityBase
{
int ID { get; set; }
bool IsActive { get; set; }
bool IsDeleted { get; set; }
DateTime? Created { get; set; }
string CreatedBy { get; set; }
}
上面的接口是有5列的接口。我想将默认值分配给IsActive为true,IsDeleted为False并创建为今天的日期。
请帮我解决此问题。
答案 0 :(得分:0)
假设这些是您的EF POCO域类,您可以将初始化推送到数据库上下文的重写SaveChanges
:
public class MyCustomDbContext : DbContext
{
public override int SaveChanges()
{
EntityState[] states =
new EntityState[] {
EntityState.Added, EntityState.Deleted, EntityState.Modified };
// get all addded/deleted/modified entries
foreach ( var entry in ChangeTracker.Entries() )
{
if ( entry.Entity is IEntityBase &&
states.Any( s => s == entry.State )
)
{
IEntityBase e = (IEntityBase)entry.Entity;
// some properties are always set
e.ModifiedDate = DateTime.Now;
// other properties are set only for
// entities in specific state
if ( entry.State == EntityState.Added )
{
e.CreatedDate = DateTime.Now;
}
}
}
// save changes
return base.SaveChanges();
}
}