为某些变量设置默认值的接口的多个实现

本文关键字:接口 实现 默认值 变量 设置 | 更新日期: 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();
    }
 }