我有一个具有以下项目的 c# 解决方案:
- 应用
- 模型
- 数据上下文
- 数据服务
DataContext 项目是我使用所有 DbSet 等配置我的 DBContext 的地方。我的 ApplicationContext.cs 具有以下内容:
public class ApplicationContext: DbContext
{
public ApplicationContext(): base("DefaultDB")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
public override int SaveChanges()
{
throw new InvalidOperationException("User ID must be provided");
}
public int SaveChanges(int userId)
{
// Get all Added/Deleted/Modified entities (not Unmodified or Detached)
foreach (var ent in this.ChangeTracker.Entries().Where(p => p.State == System.Data.EntityState.Added || p.State == System.Data.EntityState.Deleted || p.State == System.Data.EntityState.Modified))
{
// For each changed record, get the audit record entries and add them
foreach (AuditLog x in GetAuditRecordsForChange(ent, userId))
{
this.AuditLogs.Add(x);
}
}
.........
}
在这里,我将覆盖SaveChanges()方法,以便接收正在执行操作的userId,然后将其保存到审计日志中。
如果我不使用DataServices ,这会很好用。
现在,我的 DataService 项目具有以下 .svc:
public class Security : DataService<ApplicationContext>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
// Examples:
config.SetEntitySetAccessRule("SecurityUsers", EntitySetRights.All);
// config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
// Other configuration here...
config.UseVerboseErrors = true; // TODO - Remove for production?
}
}
然后,在我的应用程序项目(启动项目)中,我添加了对刚刚创建的 DataService 的服务引用。
除了方法SaveChanges()没有用于int 值(userId)的选项外,一切似乎都运行良好。添加服务引用时似乎没有反映我创建的覆盖。
关于如何解决它或解决它的解决方法的任何线索?
非常感谢。