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

时间:2015-12-22 12:57:48

标签: c# asp.net-mvc class interface

我正在使用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并创建为今天的日期。

请帮我解决此问题。

1 个答案:

答案 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();
    }
 }