多数のビジネス エンティティを持つアプリケーションを作成しています。変更されるたびに、それに応じてレコードにタイムスタンプを付け、作成/変更ユーザーを配置するようにしたいと思います。エンティティのグループと、それらのエンティティのサービス クラスがあります。すべてのエンティティは 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();
}
理想的にはエンティティを参照渡ししたいのですが、これが不可能であることはわかっています。私の質問は、このコードを一元化し、各サービス クラス内に実装する必要がないようにするにはどうすればよいかということです。