{"id":18023288,"url":"https://github.com/beginor/nhibernate-extensions","last_synced_at":"2025-07-23T14:07:45.844Z","repository":{"id":39381138,"uuid":"135659466","full_name":"beginor/nhibernate-extensions","owner":"beginor","description":"NHibernate Extensions for .NET Core","archived":false,"fork":false,"pushed_at":"2025-07-20T03:29:43.000Z","size":866,"stargazers_count":21,"open_issues_count":6,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-07-20T05:41:05.325Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/beginor.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","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,"zenodo":null}},"created_at":"2018-06-01T02:47:20.000Z","updated_at":"2025-07-20T03:29:47.000Z","dependencies_parsed_at":"2024-02-04T06:23:03.982Z","dependency_job_id":"1783b467-5758-49b3-858a-b0d01923d129","html_url":"https://github.com/beginor/nhibernate-extensions","commit_stats":null,"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/beginor/nhibernate-extensions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beginor%2Fnhibernate-extensions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beginor%2Fnhibernate-extensions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beginor%2Fnhibernate-extensions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beginor%2Fnhibernate-extensions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/beginor","download_url":"https://codeload.github.com/beginor/nhibernate-extensions/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beginor%2Fnhibernate-extensions/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266691580,"owners_count":23969182,"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","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-10-30T07:09:00.231Z","updated_at":"2025-07-23T14:07:45.835Z","avatar_url":"https://github.com/beginor.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Some useful extensions for NHibernate\n\nSome useful extensions for NHibernate used in my projects.\n\n## NHibernate.Extensions.Npgsql\n\n- Extended PostgreSQL driver [NpgsqlDriver](https://github.com/beginor/nhibernate-extensions/blob/master/src/NHibernate.Extensions.Npgsql/NpgsqlDriver.cs) for NHibernate, with support of:\n\n  - Type of `json` and `jsonb`\n  - Array type of `boolean`, `double`, `float (real)`, `int`, `short (small int)`, `long (big int)` and `string (character)`；\n  - Add `array_contains` and `array_intersects` function to hql query;\n  - Add `ArrayContains` and `ArrayIntersects` extension to linq query;\n\n- Extended PostgreSQL dialect [NpgsqlDialect](https://github.com/beginor/nhibernate-extensions/blob/master/src/NHibernate.Extensions.Npgsql/NpgsqlDialect.cs) for schema export of supported types.\n\nRefer [ArrTestEntity](./test/NHibernate.Extensions.UnitTest/TestDb/ArrTestEntity.cs) for mapping, and [ArrTest](./test/NHibernate.Extensions.UnitTest/ArrTest.cs) for sample query usage;\n\n## NHibernate.Extensions.Sqlite\n\nNHibernate driver for the Microsoft.Data.Sqlite.Core data provider for .NET.\n\nIn order to use this driver, you must have the nuget package [Microsoft.Data.Sqlite.Core](https://www.nuget.org/packages/Microsoft.Data.Sqlite.Core/) and [SQLitePCLRaw.bundle_e_sqlite3](https://www.nuget.org/packages/SQLitePCLRaw.bundle_e_sqlite3/) installed for NHibernate to load.\n\nIt's a .NET Standard 2.0 Driver, Can run on any platform that dotnet core support.\n\n## NHibernate.Extensions.NetCore\n\nExtensions for NHibernate when used in dotnet core:\n\n- Use `Microsoft.Extensions.Logging.ILoggerFactory` as NHibernate's logger factory;\n- Service Collection Extension of `AddHibernate` method for integration with `IServiceProvider`;\n- `OrderBy(string propertyName)`, `OrderByDescending(string propertyName)` and\n  `AddOrderBy(string propertyName, bool isAsc)` extension methods to `IQueryable\u003cT\u003e`, \n  make fun with dynamic order by.\n\nExample usage:\n\n```cs\npublic void ConfigureServices(IServiceCollection services) {\n    // where is your hibernate.config path\n    var path = System.IO.Path.Combine(\n        AppDomain.CurrentDomain.BaseDirectory,\n        \"hibernate.config\"\n    );\n    // add NHibernate services;\n    services.AddHibernate(path);\n}\n\npublic void Configure(\n    IApplicationBuilder app,\n    IHostingEnvironment env,\n    Microsoft.Extensions.Logging.ILoggerFactory loggerFactory\n) {\n    // Use loggerFactory as NHibernate logger factory.\n    loggerFactory.UseAsHibernateLoggerFactory();\n    /* other code goes here */\n}\n```\n\nAnd then use `ISessionFactory` in your controller:\n\n```cs\n[Route(\"api/[controller]\")]\npublic class SamplesController : Controller {\n\n    private ISessionFactory sessionFactory;\n\n    public SamplesController(ISessionFactory sessionFactory) {\n        this.sessionFactory = sessionFactory;\n    }\n\n    protected override void Dispose(bool disposing) {\n        if (disposing) {\n            sessionFactory = null;\n        }\n    }\n\n    [HttpGet(\"\")]\n    public async Task\u003cIList\u003cSample\u003e\u003e GetAll() {\n        try {\n            using (var session = sessionFactory.OpenSession()) {\n                var result = await session.Query\u003cSample\u003e().ToListAsync();\n                return result;\n            }\n        }\n        catch (Exception ex) {\n            return StatusCode(500, ex.Message);\n        }\n    }\n}\n```\n\nOr just use `ISession` in your controller:\n\n```cs\n[Route(\"api/[controller]\")]\npublic class SamplesController : Controller {\n\n    private ISession session;\n\n    public SamplesController(ISession session) {\n        this.session = session;\n    }\n\n    protected override void Dispose(bool disposing) {\n        if (disposing) {\n            session = null;\n        }\n    }\n\n    [HttpGet(\"\")]\n    public async Task\u003cIList\u003cSample\u003e\u003e GetAll() {\n        try {\n            var result = await session.Query\u003cSample\u003e().ToListAsync();\n            return result;\n        }\n        catch (Exception ex) {\n            return StatusCode(500, ex.Message);\n        }\n    }\n}\n```\n\n- `ISessionFactory` is registerd as a singleton service, you should not dispose it;\n- `ISession` is registerd as a scoped service, so you do not need to dispose it by hand;\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeginor%2Fnhibernate-extensions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbeginor%2Fnhibernate-extensions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeginor%2Fnhibernate-extensions/lists"}