EntityFramework實現指定字段的通用賦值

一、背景spa

日常咱們在建表的時候通常除了業務字段,還會加上如Create_Date 、Create_User 、Update_Date 、Update_User這樣的通用字段 ;code

1    public Nullable<System.DateTime> Create_Date { get; set; }
2         public string Create_User { get; set; }
3         public Nullable<System.DateTime> Update_Date { get; set; }
4         public string Update_User { get; set; }

這樣的公共字段,主要用於數據變動的核查,那麼在建立或者修改的時候,對象

通常的賦值方式是這樣的blog

  BQoolCommon_Inner_Country_Timezone model = new BQoolCommon_Inner_Country_Timezone();
            model.Create_Date = DateTime.UtcNow;
            model.Create_User = "test";
            model.Update_Date = DateTime.UtcNow;
            model.Update_User = "test";

直接在對象實體裏面直接賦值,可是這樣就會形成不少的重複工做,說實在的寫得多了會煩,也容易出錯;get

二、實現string

那麼有沒有偷懶的辦法呢,答案是確定的。it

下面咱們看下如何在EntityFramework實現指定通用字段的賦值;io

2.1首先是添加數據class

 public void Create(TEntity instance)
        {
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }
            else
            {
                _context.Set<TEntity>().Add(instance);
                SetCreate(instance);
                SaveChanges(instance);
            }
        }

經過反射方式,對指定的字段賦值test

private void SetCreate(TEntity instance)
        {
            var attachedEntry = _context.Entry(instance);

            PropertyInfo getProperty(string propertyName)
            {
                return attachedEntry.Entity.GetType().GetProperty(propertyName);
            }

            //Create_User
            if (getProperty("Create_User") != null && string.IsNullOrEmpty(getProperty("Create_User").GetValue(attachedEntry.Entity) as string))
            {
                getProperty("Create_User").SetValue(attachedEntry.Entity, _user);
            }
            else if (getProperty("CreateUser") != null && string.IsNullOrEmpty(getProperty("CreateUser").GetValue(attachedEntry.Entity) as string))
            {
                getProperty("CreateUser").SetValue(attachedEntry.Entity, _user);
            }

            //Create_Date
            if (getProperty("Create_Date") != null)
            {
                DateTime? createDate = getProperty("Create_Date").GetValue(attachedEntry.Entity) as DateTime?;
                if (createDate == null || createDate == DateTime.MinValue)
                {
                    getProperty("Create_Date").SetValue(attachedEntry.Entity, GetDBTime());
                }
            }
            else if (getProperty("CreateDate") != null && getProperty("CreateDate").GetValue(attachedEntry.Entity) as DateTime? == null)
            {
                DateTime? createDate = getProperty("CreateDate").GetValue(attachedEntry.Entity) as DateTime?;
                if (createDate == null || createDate == DateTime.MinValue)
                {
                    getProperty("CreateDate").SetValue(attachedEntry.Entity, GetDBTime());
                }
            }
        }

2.2再者是更新操做

 public void Update(TEntity instance)
        {
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }
            else
            {
                SetUpdate(instance);

                //_context.Entry(instance).State = EntityState.Modified;
                _context.Set<TEntity>().AddOrUpdate(instance);
                SaveChanges(instance);
            }
        }

如上方式

 public void SetUpdate(TEntity instance)
        {
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }
            else
            {
                var attachedEntry = _context.Entry(instance);

                if (attachedEntry.Entity.GetType().GetProperty("Update_User") != null && !string.IsNullOrEmpty(_user))
                {
                    attachedEntry.Entity.GetType().GetProperty("Update_User").SetValue(attachedEntry.Entity, _user);
                }
                else if (attachedEntry.Entity.GetType().GetProperty("UpdateUser") != null && !string.IsNullOrEmpty(_user))
                {
                    attachedEntry.Entity.GetType().GetProperty("UpdateUser").SetValue(attachedEntry.Entity, _user);
                }

                if (attachedEntry.Entity.GetType().GetProperty("Update_Date") != null)
                {
                    attachedEntry.Entity.GetType().GetProperty("Update_Date").SetValue(attachedEntry.Entity, GetDBTime());
                }
                else if (attachedEntry.Entity.GetType().GetProperty("UpdateDate") != null)
                {
                    attachedEntry.Entity.GetType().GetProperty("UpdateDate").SetValue(attachedEntry.Entity, GetDBTime());
                }
            }
        }

最後大功告成,不再用每次都賦值一次了。

相關文章
相關標籤/搜索