为某些变量设置默认值的接口的多个实现
本文关键字:接口 实现 默认值 变量 设置 | 更新日期: 2023-09-27 18:27:53
我正在使用代码优先方法开发MVC应用程序。我创建了一个名为IEntityBase的通用接口。我已经定义了将在所有表中使用的基本列。我想为一些列分配默认值,这样当它创建新行时,这些值将默认分配。正如我们可以在每个类构造函数中定义的那样,但我想将它们分配为泛型,这样,如果我将来要添加任何新列,我就可以这样做
我可以利用国际奥委会吗?
例如
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,将Created分配为今天的日期。
请帮我解决这个问题。
假设这些是您的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();
}
}