私は、RavenDB を使用するアプリケーション フレームワークを動かそうとしています。セッションと 1 対 1 の関係を持ち、効果的に作業単位の抽象化になるビジネス ロジック サービスをセットアップしました。
ビジネス ロジック サービスの一部には、すべての検証が含まれます。サービスからのメソッドは次のようなものかもしれません
    public void StoreUser(User user)
    {
        //Some validation logic
        if(string.IsNullOrWhiteSpace(user.Name))
            throw new Exception("User name can not be empty");
        Session.Store(user);
    }
問題は、ユーザーが保存されるとすぐに追跡されるため、store メソッドの検証をバイパスできますが、正しい値を保存して後で変更できることです。
    public void TestUserStore()
    {
        var u1 = new User() {Name = "John"};
        var u2 = new User() { Name = "Amy" };
        Service.StoreUser(u1);
        u1.Name = null; //change is tracked and will persist on the next save changes
        Service.StoreUser(u2);
        Service.SaveChanges();
        //The following fails, as we have stored null as the name rather than "John" bypassing our validation
        Assert.IsTrue(Service.AdhocQuery<User>().Any(u => u.Name == "John"));
    }
保存されたアイテムのスナップショットのみを保存し、それ以上の変更を追跡しないように RavenDB を取得する方法はありますか? 違法な更新を防ぐために、ビジネス ロジック サービスに出入りするすべてのものを複製する必要がありますか? または、間違った場所で検証を行っていますか?このロジックを配置するより良い場所はありますか?