{"id":25435593,"url":"https://github.com/mfidemraizer/trackerdog","last_synced_at":"2025-09-16T18:00:35.974Z","repository":{"id":149824717,"uuid":"45834237","full_name":"mfidemraizer/trackerdog","owner":"mfidemraizer","description":"Generic object change tracker for .NET Framework and .NET Standard-compliant platforms like .NET Core and Xamarin!","archived":false,"fork":false,"pushed_at":"2017-12-31T16:53:52.000Z","size":4223,"stargazers_count":100,"open_issues_count":10,"forks_count":9,"subscribers_count":5,"default_branch":"v2","last_synced_at":"2025-04-09T23:15:21.095Z","etag":null,"topics":["c-sharp","change-tracker","dotnet","dotnet-core","net-standard","object-graph","poco","poco-changes","proxies"],"latest_commit_sha":null,"homepage":"http://mfidemraizer.github.io/trackerdog","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mfidemraizer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-11-09T11:34:42.000Z","updated_at":"2025-01-15T19:15:18.000Z","dependencies_parsed_at":"2023-04-28T05:11:37.583Z","dependency_job_id":null,"html_url":"https://github.com/mfidemraizer/trackerdog","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfidemraizer%2Ftrackerdog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfidemraizer%2Ftrackerdog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfidemraizer%2Ftrackerdog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfidemraizer%2Ftrackerdog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mfidemraizer","download_url":"https://codeload.github.com/mfidemraizer/trackerdog/tar.gz/refs/heads/v2","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248125592,"owners_count":21051770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-sharp","change-tracker","dotnet","dotnet-core","net-standard","object-graph","poco","poco-changes","proxies"],"created_at":"2025-02-17T07:30:29.257Z","updated_at":"2025-09-16T18:00:30.868Z","avatar_url":"https://github.com/mfidemraizer.png","language":"C#","readme":"# Welcome to TrackerDog!\n\n![trackerdog build badge](https://mfidemraizer.visualstudio.com/_apis/public/build/definitions/6b21f8d5-b74c-4f26-8e06-f156bd0ab331/1/badge)\n![project logo](http://mfidemraizer.github.io/trackerdog/media/dogtracker.png)\n\n## What is TrackerDog?\n\nTrackerDog works on seamlessly turning your .NET objects into change-tracked objects. It can track a full object graph, including collection properties.\n\nAlso, since version 2.2.0, **TrackerDog works on both full .NET Framework and .NET Standard-compliant platforms like .NET Core or Xamarin**!\n\n\u003cimg src=\"https://docs.microsoft.com/en-us/dotnet/articles/images/hub/netcore.svg\" width=\"100\"\u003e \n\u003cimg src=\"https://docs.microsoft.com/en-us/dotnet/articles/images/hub/net.svg\" width=\"100\"\u003e \n\u003cimg src=\"https://docs.microsoft.com/en-us/dotnet/articles/images/hub/xamarin.svg\" width=\"100\"\u003e\n\n## How to install it?\n\nTrackerDog is distributed as a NuGet package called _TrackerDog_. Follow \u003ca href=\"https://www.nuget.org/packages/TrackerDog/\"\u003ethis link to get installation instructions\u003c/a\u003e.\n\n## Getting started\n\u003ca href=\"http://mfidemraizer.github.io/trackerdog/html/52e40f26-3dfe-47e0-adf1-09233e98f42e.htm\"\u003eFollow up this tutorial\u003c/a\u003e to become object change tracking expert!\n\nIf you're looking for API reference, [follow this link](http://mfidemraizer.github.io/trackerdog).\n\n## Why TrackerDog?\n\nWhen implementing some design patterns like _Unit of Work_ in a very seamless way, it is required that the whole _Unit of Work_ could track object changes and produce _new_ or _updated_ object persistence actions in order to let a given peristence layer work on the so-called operations.\n\nMost enterprise applications work with _object-relational mappers (OR/M)_ like _Entity Framework_ and _NHibernate_ which, as full _OR/M_ frameworks, they can track persistent object changes and generate an underlying SQL `INSERT`, `UPDATE` or `DELETE` under the hoods thanks to their built-in change tracking.\n\nAt the end of the day, these _OR/M_ frameworks implement change tracking turning your POCO class instances into _proxies_ that intercept your POCO property changes and once you call the _commit_-specific method of their built-in _unit of work_ they can persist changes to the database without your intervention.\n\nSo, what happens when you don't use an _OR/M_ or, even worse: **what happens when you don't use an _OR/M_ but you want to implement an _unit of work_ capable of tracking your POCO changes?**\n\nA good example of implementing a change tracking can be an _unit of work_ to provide an abstraction layer over a NoSQL driver like Mongo, Couch, Cassandra, Redis... Even when some of them have some kind of atomically-executed set of commands, they will not track changes in your application layer. Actually there should be more possible use cases, but one of most important use cases is implementing a true _domain-driven design_ architecture ensuring that a domain unit of work can track changes either when you use a regular _data mapper_ (for which you won't use TrackerDog) or you want to implement _repositories_ that return change-trackable domain objects!\n\nIn summary, TrackerDog turns your object graphs into interceptable object proxies that share a common _change tracker_ which let you check what has changed in your objects or even accept or undo changes to a given object graph.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfidemraizer%2Ftrackerdog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmfidemraizer%2Ftrackerdog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfidemraizer%2Ftrackerdog/lists"}