2013-03-19 57 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数据类型转换为日期时间数据类型导致超出范围的值。”并假定价值观没有被设定。这实际上是由于完全不同的问题。感谢您指点我正确的方向。