2016-12-25 36 views
3

我有一個DB,它的所有實體都有一些用於創建/修改/刪除的日誌字段,並且我必須在我的所有CRUD操作中採用當前用戶標識,並將這些字段設置爲安全目的....如何在C#中的倉庫中設置一些實體屬性?

這是我的實體的例子:

//log properties 
    public byte RecordStatus { get; set; } 
    public string RecordStatusDescription { get; set; } 
    public string CreatedBy { get; set; } 
    public DateTime CreatedDateTime { get; set; } 
    public string CreatorIPAddress { get; set; } 
    public string ModifiedBy { get; set; } 
    public DateTime ModifiedDateTime { get; set; } 
    public string ModifierIPAddress { get; set; } 
    public string RemovedBy { get; set; } 
    public string RemovedDateTime { get; set; } 
    public string RemoverIPAddress { get; set; } 
    public bool IsRemoved { get; set; } 

我使用存儲庫,我想這樣的事情添加到我的IRepository接口:

public interface IBaseRepository<TEntity> where TEntity : class 
{ 
    void Createdby(string UserId , string userIP); 
    void ModifiedBy(string UserId , string userIP); 
    void RemovedBy(string UserID , string userIP); 
} 

所以我怎麼能在我的資源庫實現這一點,然後在我的行動中使用它!?

我可以設置傳統的方式這個領域,但我希望有更多的清潔動作...

+0

我應該在所有的[Entity] Repository中定義這些嗎!我只是不想在20多個[Entity] Repository中複製這些方法! –

+0

我知道Repository是用於與DB直接交互但是!你建議我應該爲這些操作定義單獨的類並在其中定義這些方法!或者只是使用傳統的設置屬性的方式!你會選擇什麼方法來解決這個問題!? –

+0

結帳答案,如果您有任何問題告訴我:) – Valkyrie

回答

2

好了,所以你必須作出明確IRepository,使之儘可能簡單是這樣的(因爲你想要這個通用):

IRepository

public interface IRepository<T> 
{ 
    void Add(T entity); 
    void Delete(T entity); 
    void Delete(int id); 
    T GetById(int id); 
    IEnumerable<T> GetAll(); 
    void Update(T entity); 
    void save(); 
} 

,並創建一個通用庫象下面這樣:

public class Repository<T> : IRepository<T> 
    where T : EntityBase 
{ 

    internal MyDbContext context; 
    internal DbSet<T> dbSet; 
    public Repository() 
    { 

     context = new MyDbContext(); 
     this.dbSet = context.Set<T>(); 

    } 

    public void Add(T entity) 
    { 
     dbSet.Add(entity); 
    } 

    public void Delete(T entity) 
    { 
     dbSet.Remove(entity); 
    } 

    public void Delete(int id) 
    { 
     dbSet.Remove(dbSet.Find(id)); 
    } 

    public T GetById(int id) 
    { 
     return dbSet.Find(id); 
    } 

    public IEnumerable<T> GetAll() 
    { 
     return dbSet.AsEnumerable(); 
    } 

    public void Update(T entity) 
    { 
     dbSet.Attach(entity); 
     context.Entry(entity).State = EntityState.Modified; 
    } 

    public void save() 
    { 
     context.SaveChanges(); 
    } 
} 

約EntityBase好東西是因爲你所有的性質有一個id,你可以輕鬆地去這樣的:

public class EntityBase 
{ 
    public int id { get; set; } 
} 

,然後實現這個你模式

public class Example : EntityBase 
{ 

public byte RecordStatus { get; set; } 
public string RecordStatusDescription { get; set; } 
public string CreatedBy { get; set; } 
public DateTime CreatedDateTime { get; set; } 
public string CreatorIPAddress { get; set; } 
public string ModifiedBy { get; set; } 
public DateTime ModifiedDateTime { get; set; } 
public string ModifierIPAddress { get; set; } 
public string RemovedBy { get; set; } 
public string RemovedDateTime { get; set; } 
public string RemoverIPAddress { get; set; } 
public bool IsRemoved { get; set; } 

} 

使用這個簡單的存儲庫的好處是你可以很容易地做任何事情,例如:

public class HomeController : Controller 
{ 

    Repository<Example> _repository = new Repository<Example>(); 


    public ActionResult Index() 
    { 
     vm.Example = _repository.GetAll() 
      .Where(x => x.RecordStatusDescription == "1").ToList(); 
     return View("index",vm); 
    } 
} 
+0

謝謝,我會檢查它,當我有時間.... –

+0

@RezaPouya很高興幫助=) – Valkyrie

+0

謝謝,我檢查了它,這項工作... –

相關問題