2013-03-19 64 views
0

我正在創建一個擁有衆多業務實體的應用程序。我想確保每次修改時,都會相應地記錄該記錄並放置創建/修改用戶。我有一組實體和這些實體的服務類。所有實體都實現IBaseEntity並繼承BaseService。通過引用將接口傳遞給基類

public interface IBaseEntity 
{ 
    int Id { get; set; } 
    DateTime CreatedOn{ get; set; } 
    DateTime LastModifiedOn { get; set; } 
    Employee CreatedBy { get; set; } 
    Employee LastModifiedBy { get; set; }  
} 

public abstract class BaseService 
{ 
    public void Create(IBaseEntity entity) 
    { 
     entity.CreatedBy = new Employee { Id = entity.Id }; 
     entity.CreatedOn = DateTime.UtcNow; 
     entity.LastModifiedBy = new Employee { Id = entity.Id }; 
     entity.LastModifiedOn = DateTime.UtcNow; 
    } 
} 

在我的EmployeeService中,我會在添加或附加實體之前調用我的基本Update和Create方法。

public Employee Create(Employee employee) 
{ 
     // Create User 
     base.Create(employee); 
     context.Employees.Add(employee);    
     context.SaveChanges(); 
} 

理想情況下,我想通過引用傳遞實體,但我知道這是不可能的。我的問題是,如何實現這一點,以便我可以集中這些代碼,而不必在每個服務類中實現。

+1

任何類實例都是C#中的引用。請解釋更多。 – Igor 2013-03-19 04:50:29

+0

你爲什麼說你不能通過引用傳遞它?由於您的代碼目前處於最新狀態,因此將您的員工類傳遞給您的Create方法沒有任何問題。 – shenku 2013-03-19 04:54:06

+0

對不起,我應該澄清。就目前而言,我對此解決方案的實施不起作用。在基類中編輯的值不會像我所假設的那樣影響員工實體。我的下一個想法是在提交之前通過引用來傳遞它。是的,我可以通過它,但如果我嘗試通過引用來傳遞Create(ref僱員),編譯器會抱怨我無法傳遞一個Employee,因爲它期望一個IBaseEntity。 – XVargas 2013-03-19 04:59:57

回答

1

伊戈爾說得對!我得到了:「將datetime2數據類型轉換爲日期時間數據類型導致超出範圍的值。」並假定價值觀沒有被設定。這實際上是由於完全不同的問題。感謝您指點我正確的方向。