次のプロジェクトを持つ C# ソリューションがあります。
- 応用
- モデル
- DataContext
- データサービス
DataContext プロジェクトは、DBContext をすべての DbSet などで構成する場所です。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);
}
}
.........
}
ここでは、アクションを実行しているuserIdを受け取り、それを監査ログに保存するために、 SaveChanges()メソッドをオーバーライドしています。
DataServicesを使用しない場合、これはうまく機能しています。
これで、次の .svc を含む DataService プロジェクトができました。
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 )のオプションがないことを除いて、すべてが正常に機能しているようです。サービス参照を追加すると、作成したオーバーライドが反映されないようです。
それを解決する方法またはそれに対処するための回避策についての手がかりはありますか?
どうもありがとう。